Python影像辨識筆記(三):Open CV操作筆記

文章推薦指數: 80 %
投票人數:10人

#2021/04/13更新OpenCV的DNN模組使用,在使用Intel CPU的情況下,可直接載入透過darknet, PyTorch, TensorFlow, ONNX......等framework訓練好的模型,並使用CPU進行 ... GetstartedOpeninappYanweiLiuSigninGetstarted1.3KFollowersAboutGetstartedOpeninappPython影像辨識筆記(三):OpenCV操作筆記YanweiLiuApr25,2019·17minread#2021/04/13更新OpenCV的DNN模組使用,在使用IntelCPU的情況下,可直接載入透過darknet,PyTorch,TensorFlow,ONNX......等framework訓練好的模型,並使用CPU進行Inferencehttps://learnopencv.com/deep-learning-with-opencvs-dnn-module-a-definitive-guide/#2021/03/23更新OpenCV基礎入門(有圖片及程式碼解釋)https://www.pyimagesearch.com/2018/07/19/opencv-tutorial-a-guide-to-learn-opencv/#20210322更新TemplateMatchinghttps://www.pyimagesearch.com/2021/03/22/opencv-template-matching-cv2-matchtemplate/#20200702更新LearnXinYminutes的OpenCV教學LearnXinYminutesWhereX=OpenCVOpenCV(OpenSourceComputerVision)isalibraryofprogrammingfunctionsmainlyaimedatreal-timecomputervision…learnxinyminutes.com#20200430更新jennaweng0621所寫的OpenCV應用總整理,內容相當好,值得推薦[Python]OpenCV應用總整理@K_程式人::痞客邦::以下將不定期更新關於OpenCV模組相關應用,查看用法直接點選下表各項目即可1灰階轉彩色(GraytoRGB)2jennaweng0621.pixnet.net#20200324更新OpenCV讀取IPCamera內容cap=cv2.VideoCapture('http://192.168.0.137:81/videostream.cgi?loginuse=username&loginpas=password&resolution=32')#20200322更新OpenCV與Pillow格式互轉https://gist.github.com/e96031413/3f8e2ddf63f7428776cda703cb6e4f31#20200131更新OpenCVPythonTutorial-GeeksForGeeks本連結中的文章提供相當多關於OpenCV的使用方式OpenCVPythonTutorial-GeeksforGeeksOpenCVisahugeopen-sourcelibraryforcomputervision,machinelearning,andimageprocessing.OpenCVsupportsa…www.geeksforgeeks.orgPython影像辨識筆記(一):使用OpenCV辨識圖片及影片中的人臉圖片人medium.com在上上一篇文章中,我們透過OpenCV進行了人臉辨識,接下來,我們要來詳細解釋OpenCV的函式功能引入模組importnumpyasnpimportcv2讀取圖檔img=cv2.imread('image.jpg')#以cv2.imread讀進來的資料,會存成NumPy陣列----------------------------------------------------------#以灰階的方式讀取圖檔img_gray=cv2.imread('image.jpg',cv2.IMREAD_GRAYSCALE)#cv2.IMREAD_COLOR為預設值#cv2.IMREAD_GRAYSCALE以灰階的格式來讀取圖片。

#cv2.IMREAD_UNCHANGED讀取圖片中所有的channels,包含透明度的channel。

查看圖片屬性#1920×1080的彩色圖片img.shape(1080,1920,3)#(圖片高度,圖片寬度,RGB維度)RGB微度彩色為3,灰階為1建立特徵分類器faceCascade=cv2.CascadeClassifier(cascPath)#Cascade為一個XML檔偵測圖片faces=faceCascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(30,30),flags=cv2.cv.CV_HAAR_SCALE_IMAGE)#detectMultiScale為偵測特徵的功能#gray是灰階圖片#scaleFactor圖像縮放比例,類似相機X倍鏡頭#minNeighbors針對特徵點附近進行檢測#minSize特徵檢測點的最小尺寸scaleFactor,minNeighbors,minSize數值大小將影響辨識結果,須依狀況進行實驗繪製方框for(x,y,w,h)infaces:cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)#(0,255,0)欄位可以變更方框顏色(Blue,Green,Red)#轉換成RGB格式#rgb_image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)在圖片內畫線importcv2output=image.copy()cv2.line(output,(60,20),(400,200),(0,0,255),5)viewImage(output,"2Doggosseparatedbyaline")#output為要畫線的圖片名稱#(60,20)=(x1,y1)#(400,200)=(x2,y2)#(0,0,255)為線條顏色(GBR或RGB,取決於是否使用cv2.cvtColor(image,cv2.COLOR_BGR2RGB))#5為線條粗細度--------------------------------------------------------------cv2.line()畫直線cv2.circle()畫圓cv2.rectangle()畫矩形cv2.ellipse()畫橢圓cv2.polylines()畫多邊形顯示圖片#顯示圖片cv2.imshow('MyImage',img)cv2.waitKey(0)#持續等待至使用者按下按鍵為止(單位為毫秒)cv2.destroyAllWindows()#關閉所有視窗cv2.destroyWindow('MyImage')#關閉MyImage視窗裁切圖片importcv2#讀取圖檔img=cv2.imread("lena.jpg")#裁切區域的x與y座標(左上角)x=100y=100#裁切區域的長度與寬度w=250h=150#裁切圖片crop_img=img[y:y+h,x:x+w]#顯示圖片cv2.imshow("cropped",crop_img)cv2.waitKey(0)#寫入圖檔cv2.imwrite('crop.jpg',crop_img)調整亮度importcv2importnumpyasnpimg=cv2.imread('lena.jpg')res=np.uint8(np.clip((1.5*img+10),0,255))tmp=np.hstack((img,res))#兩張圖片橫向合併(便於對比顯示)cv2.imshow('image',tmp)cv2.waitKey(0)改變圖片比例importcv2scale_percent=20#percentoforiginalsizewidth=int(img.shape[1]*scale_percent/100)height=int(img.shape[0]*scale_percent/100)dim=(width,height)resized=cv2.resize(img,dim,interpolation=cv2.INTER_AREA)viewImage(resized,"Afterresizingwith20%")旋轉指定角度importcv2(h,w,d)=image.shapecenter=(w//2,h//2)M=cv2.getRotationMatrix2D(center,180,1.0)rotated=cv2.warpAffine(image,M,(w,h))viewImage(rotated,"旋轉180度後")#image.shape顯示高,寬,channels.#M:從中心旋轉180度.水平垂直翻轉importcv2image=cv2.flip(img,1)#參數2=0:垂直翻轉(沿x軸)#參數2>0:水平翻轉(沿y軸)#參數2<0:水平垂直翻轉灰階效果importcv2gray_image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)ret,threshold_image=cv2.threshold(im,127,255,0)viewImage(gray_image,"Gray-scaledoggo")viewImage(threshold_image,"Black&Whitedoggo")#ret,threshold=cv2.threshold(im,150,200,10)#調整參數會有不同效果高斯模糊importcv2blurred=cv2.GaussianBlur(image,(51,51),0)viewImage(blurred,"Blurreddoggo")#image是要模糊化的圖片名稱#(51,51)必須為正奇數,數字越高照片越模糊#0:sigmaXandsigmaY,預設值即可邊緣檢測importcv2importnumpyasnpimg=cv2.imread('handwriting.jpg',0)edges=cv2.Canny(img,30,70)#canny邊緣檢測cv2.imshow('canny',np.hstack((img,edges)))cv2.waitKey(0)#cv2.Canny()進行邊緣檢測,參數2、3表示最低、高閾值匹配圖片用模板圖片去尋找圖片中的物件#讀入原圖和模板img_rgb=cv2.imread('mario.jpg')img_gray=cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)template=cv2.imread('mario_coin.jpg',0)h,w=template.shape[:2]#標準相關模板匹配res=cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)threshold=0.8loc=np.where(res>=threshold)#匹配程度大於%80的坐標y,xforptinzip(*loc[::-1]):#*號表示可選參數right_bottom=(pt[0]+w,pt[1]+h)cv2.rectangle(img_rgb,pt,right_bottom,(0,0,255),2)縮放視窗大小#讓視窗可以自由縮放大小cv2.namedWindow('MyImage',cv2.WINDOW_NORMAL)cv2.imshow('MyImage',img)cv2.waitKey(0)cv2.destroyAllWindows()寫入圖片檔案#寫入圖檔cv2.imwrite('result.jpg',img)#寫入不同圖檔格式cv2.imwrite('result.png',img)cv2.imwrite('result.tiff',img)#設定JPEG圖片品質為90(可用值為0~100)cv2.imwrite('output.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,90])#設定PNG壓縮層級為5(可用值為0~9)cv2.imwrite('output.png',img,[cv2.IMWRITE_PNG_COMPRESSION,5])使用Matplotlib顯示圖片#彩色圖片importnumpyasnpimportcv2frommatplotlibimportpyplotasplt#使用OpenCV讀取圖檔img_bgr=cv2.imread('image.jpg')img_rgb=cv2.cvtColor(img_bgr,cv2.COLOR_BGR2RGB)#使用Matplotlib顯示圖片plt.imshow(img_rgb)plt.show()#灰階圖片#使用OpenCV讀取灰階圖檔img_gray=cv2.imread('image.jpg',cv2.IMREAD_GRAYSCALE)#使用Matplotlib顯示圖片plt.imshow(img_gray,cmap='gray')plt.show()加入英文字importnumpyasnpimportcv2img=np.zeros((400,400,3),np.uint8)img.fill(90)#文字text='Hello,OpenCV!'#使用字體#cv2.putText(影像,要顯示的文字,座標,字型,字體大小,顏色,線條寬度,線條種類)cv2.putText(img,text,(10,40),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,255),1,cv2.LINE_AA)cv2.imshow('MyImage',img)cv2.waitKey(0)cv2.destroyAllWindows()加入中文字importcv2importnumpyfromPILimportImage,ImageDraw,ImageFontdefcv2ImgAddText(img,text,left,top,textColor=(0,255,0),textSize=20):if(isinstance(img,numpy.ndarray)):#判断是否OpenCV图片类型img=Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))draw=ImageDraw.Draw(img)fontText=ImageFont.truetype("font/simsun.ttc",textSize,encoding="utf-8")draw.text((left,top),text,textColor,font=fontText)returncv2.cvtColor(numpy.asarray(img),cv2.COLOR_RGB2BGR)--------------------------------------------------------img=cv2ImgAddText(img,"大家好",140,60,(255,255,0),20)視訊鏡頭影像importcv2#選擇第二隻攝影機(0代表第一隻、1代表第二隻)。

cap=cv2.VideoCapture(1)while(True):#從攝影機擷取一張影像ret,frame=cap.read()#顯示圖片cv2.imshow('frame',frame)#若按下q鍵則離開迴圈ifcv2.waitKey(1)&0xFF==ord('q'):break#釋放攝影機cap.release()#關閉所有OpenCV視窗cv2.destroyAllWindows()#用cap.isOpened()檢查攝影機是否有啟動#用cap.open()啟動它。

影片相關資訊importcv2cap=cv2.VideoCapture(1)#解析Fourcc格式資料的函數defdecode_fourcc(v):v=int(v)return"".join([chr((v>>8*i)&0xFF)foriinrange(4)])#取得影像的尺寸大小width=cap.get(cv2.CAP_PROP_FRAME_WIDTH)height=cap.get(cv2.CAP_PROP_FRAME_HEIGHT)print("ImageSize:%dx%d"%(width,height))#取得Codec名稱fourcc=cap.get(cv2.CAP_PROP_FOURCC)codec=decode_fourcc(fourcc)print("Codec:"+codec)cap.release()變更影片解析度importcv2cap=cv2.VideoCapture(1)#設定影像的尺寸大小cap.set(cv2.CAP_PROP_FRAME_WIDTH,1280)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,960)while(True):ret,frame=cap.read()cv2.imshow('frame',frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()讀取影片檔案importcv2#開啟影片檔案cap=cv2.VideoCapture('my_video.avi')#以迴圈從影片檔案讀取影格,並顯示出來while(cap.isOpened()):ret,frame=cap.read()cv2.imshow('frame',frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()寫入影片檔案importcv2cap=cv2.VideoCapture(1)#設定擷取影像的尺寸大小cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,360)#使用XVID編碼fourcc=cv2.VideoWriter_fourcc(*'XVID')#影片常見編碼格式:DIVX、XVID、MJPG、X264、WMV1、WMV2#建立VideoWriter物件,輸出影片至output.avi#FPS值為20.0,解析度為640x360out=cv2.VideoWriter('output.avi',fourcc,20.0,(640,360))while(cap.isOpened()):ret,frame=cap.read()ifret==True:#寫入影格out.write(frame)cv2.imshow('frame',frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakelse:break#釋放所有資源cap.release()out.release()cv2.destroyAllWindows()YanweiLiuMachineLearning|DeepLearning|https://linktr.ee/yanweiFollow110110 110PythonProgrammingArtificialIntelligenceMorefromYanweiLiuFollowMachineLearning|DeepLearning|https://linktr.ee/yanwei



請為這篇文章評分?