Python入門學習 part 3 :OpenCV圖像簡單操作

Python入門學習 part 3 :OpenCV圖像簡單操作

最近認識了OpenCV,我們來介紹一下OpenCV圖像的簡單操作

讀取圖片

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/1.jpg')#絕對路徑(推薦),也可以是相對路徑
img1=cv2.imread('C:\\Users\\admin\\Desktop\\20191027-Pyhton+OpenCV\\a\\1.jpg')#python中'\\'與'/'等同
cv2.imshow('text',img)#imshow指讀取圖片
cv2.imshow('text1',img)
cv2.waitKey(0)#沒有這句話,圖片將會一閃而過

注意讀取圖片要標明圖片名和圖片類型(讀取圖片相同)

保存圖片

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/1.jpg')
#OpenCV可以實現不同格式圖片轉換,支持jpg、bmp、png等圖片格式相互無損轉換
cv2.imwrite('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/1.png',img)

保存圖片時標明路徑,圖片名,及圖片格式

截取部分圖像

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
frame=img[200:400,200:400]#截取200-400行,200-400列的圖像
cv2.imshow('text',frame)
cv2.waitKey(0)

注意格式
變量名2=變量名1[x1:y1,x2:y2](有行截取和列截取)
截取時是中括號不是括號

圖片翻轉

cv2.flip()函數

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img1=cv2.flip(img,1)#大於0,左右翻轉
img2=cv2.flip(img,0)#等於0,上下翻轉
img3=cv2.flip(img,-1)#小於0,先上下翻轉再左右翻轉
cv2.imshow('text',img)
cv2.imshow('text1',img1)
cv2.imshow('text2',img2)
cv2.imshow('text3',img3)
cv2.waitKey(0)

注意使用flip()時應注意img在前不在後(特殊)

縮放圖片

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img1=cv2.resize(img,(500,500))#設置輸出圖片的尺寸
img2=cv2.resize(img,None,fx=0.7,fy=0.7)#None指圖片尺寸,但我們設置了縮放因子
cv2.imshow('text',img1)
cv2.imshow('text1',img2)
cv2.waitKey(0)

注意:
設置縮放因子時,尺寸得打None(否則語法錯誤),且縮放因子是fx,fy不是x,y

轉化爲灰度圖像

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')#cv2.imread讀進來的圖片格式是BGR(W,H,C),而不是RGB
img1=cv2.resize(img,(400,400))
cv2.imshow('BGR',img1)
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)#將BGR轉化成RGB
cv2.imshow('RGB',img2)
img3=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#將BGR轉化成灰度圖像
cv2.imshow('GRAY',img3)
cv2.waitKey(0)

效果圖在這裏插入圖片描述
注意:cvtColor中C是大寫
2前爲轉化前,2後爲轉化後(且均用大寫表示)
imread讀進的格式爲BGR非RGB

在一個窗口中顯示兩張圖片

import cv2
import numpy as np
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img2=cv2.resize(img,(200,200))
img3=np.vstack([img2,img2])#在豎直方向上堆疊
img4=np.hstack([img2,img2])#在水平方向平鋪
cv2.imshow('text',img3)
cv2.imshow('text1',img4)
cv2.waitKey(0)

注意,引用了numpy
vstack(豎直)和和hstack(水平)前用numpy(不是cv2)

繪圖功能

import cv2
import numpy as np
img  = 255*np.ones((500,500,3),np.uint8)#unit8:0~255#(500,500,3)指圖片尺寸和背景板(白黑灰)
font = cv2.FONT_HERSHEY_DUPLEX#字體(網上有各種版本)
#以下注釋從左到右
#輸入內容,字體座標,字體,字體大小,字體顏色(BGR),字體粗細
cv2.putText(img,'good',(50,300),font,1,(25,25,25),2)
#起始點座標,終止點座標,顏色,粗細
cv2.line(img,(70,80),(90,100),(0,0,0),5)
#左上點座標,右下點座標,顏色,粗細
cv2.rectangle(img,(80,100),(100,20),(0,0,0),5)
#圓心座標,半徑,顏色,粗細(-1控制是否填充)
cv2.circle(img,(60,60),50,(0,0,255),1)
#中心點,(長軸,短軸),偏轉角度,起始角度,終止角度,顏色,粗細(-1控制填充)
cv2.ellipse(img,(100,300),(50,50),160,0,360,(20,213,79),1)
cv2.imshow("Draw", img)
cv2.waitKey(0)

下面分享一隻作者做的小豬佩奇
附上代碼

import cv2
import numpy as np
img=255*np.ones((700,700,3),np.uint8)
cv2.ellipse(img,(125,300),(60,60),180,160,390,(203,192,255),-1)#頭
cv2.ellipse(img,(146,260),(75,50),160,0,360,(203,192,255),-1)#鼻子
cv2.circle(img,(120,235),10,(255,255,255),-1)#眼睛
cv2.circle(img,(148,222),10,(255,255,255),-1)#眼睛
cv2.circle(img,(123,235),5,(0,0,0),-1)#眼睛
cv2.circle(img,(151,222),5,(0,0,0),-1)#眼睛
cv2.ellipse(img,(195,244),(30,20),80,0,360,(71,99,255),3)#鼻子圈
cv2.circle(img,(190,235),4,(0,0,0),-1)#鼻孔
cv2.circle(img,(200,230),4,(0,0,0),-1)#鼻孔
cv2.ellipse(img,(140,300),(30,30),180,170,350,(0,0,255),3)#嘴巴
cv2.circle(img,(90,290),15,(255,0,255),-1)#腮紅
cv2.ellipse(img,(90,225),(20,10),60,0,360,(203,192,255),-1)#耳朵
cv2.ellipse(img,(125,205),(20,10),70,0,360,(203,192,255),-1)#耳朵
cv2.ellipse(img,(125,430),(100,65),90,90,270,(203,192,255),-1)#身體
cv2.line(img,(170,370),(210,390),(203,192,255),4)#右手臂
cv2.line(img,(210,390),(213,395),(203,192,255),4)#手指
cv2.line(img,(210,390),(213,385),(203,192,255),4)#手指
cv2.line(img,(210,390),(219,392),(203,192,255),4)#手指
cv2.line(img,(85,360),(40,330),(203,192,255),4)#左手臂
cv2.line(img,(40,330),(37,335),(203,192,255),4)#手指
cv2.line(img,(40,330),(37,325),(203,192,255),4)#手指
cv2.line(img,(40,330),(33,330),(203,192,255),4)#手指
cv2.line(img,(100,430),(100,455),(203,192,255),4)#手指
cv2.line(img,(150,430),(150,455),(203,192,255),4)#手指
cv2.ellipse(img,(108,455),(10,5),180,0,360,(0,0,0),-1)#腳
cv2.ellipse(img,(158,455),(10,5),180,0,360,(0,0,0),-1)#腳
cv2.ellipse(img,(60,400),(8,8),180,180,0,(203,192,255),4)#尾巴
cv2.ellipse(img,(45,398),(8,8),180,180,360,(203,192,255),4)#尾巴
cv2.putText(img,'peppa pig',(400,400),cv2.FONT_HERSHEY_DUPLEX,1,(0,0,0),2)#字體
cv2.imshow('draw',img)
cv2.waitKey(0)

在這裏插入圖片描述
可以把我們所做的OpenCV簡單操作的圖片保存成一個文件夾

import cv2
import numpy as np
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img1=cv2.resize(img,(400,400))
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img3=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
img4=cv2.resize(img,(700,700))
img5=cv2.resize(img,None,fx=0.7,fy=0.7)
img6=cv2.flip(img1,1)
img7=cv2.flip(img1,0)
img8=cv2.flip(img1,-1)
img9=np.vstack([img1,img1])
img10=np.hstack([img1,img1])
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/1.jpg',img1)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/2.jpg',img2)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/3.jpg',img3)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/4.jpg',img4)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/5.jpg',img5)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/6.jpg',img6)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/7.jpg',img7)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/8.jpg',img8)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/9.jpg',img9)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/10.jpg',img10)
cv2.waitKey(0)

在這裏插入圖片描述
Ending!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章