opencv常見函數用法

Mat類:
是用於保存圖像以及其他矩陣數據的數據結構。

圖像載入函數imread():
Mat imread(const string& filename, int flags=1);

filename表示圖像載入的路徑;
flags爲載入標識。
flags=0 將圖像轉換爲灰度再返回;
flags=1 將圖像轉換成彩色再返回;
flags=2 若載入圖像的深度是16位或者32位,就返回對應的圖像深度,否則,將圖像轉換爲8位圖像再返回。
flags=2|4 載入最真實無損的源圖像
若flags不在枚舉類型當中,flags>0 返回一個三通道的彩色圖像;flags=0 返回灰度圖像;flags<0 返回包含Alpha通道的加載圖像。
圖像顯示函數imshow():
void imshow(const string& winname, InputArray mat);

winname填寫要顯示的窗口標識名稱;
mat填需要顯示的圖像。
輸出圖像到文件imwrite():
bool imwrite(const string& filename, InputArray img, const vector& params=vector());

第一個參數filename表示要寫入的文件名
第二個參數img表示Mat類型的圖像數據

通道分離split()函數;
void split(const Mat& src, Mat* mvbegin);
void split(InputArray m, OutputArrayofArray mv);

第一個參數表示需要進行分離的多通道數組;
第二個參數表示函數 輸出數組或輸出的vector容器。
通道合併merge()函數:
void merge(const Mat* mv, size_t count, OutputArray dst)
void merge(InputArrayOfArray mv, OutputArray dst);

第一個參數mv表示需要被合併的輸入矩陣或vector容器的陣列,mv參數中所有矩陣必須擁有一樣的尺寸;
第二個參數count表示當mv爲空白的C數組時,代表輸入矩陣的個數,通常可以省略不寫;
第三個參數dst表示輸出矩陣,和mv擁有一樣的尺寸和深度

Python與OpenCV圖像簡單操作

OpenCV安裝

打開命令行輸入 pip install opencv-python(前提是有python環境)

1.讀取圖片

使用 cv2.imread() 函數,給出了幾種讀取圖片路徑的寫法

import cv2#導入opencv包

#python中不需要聲明變量
img1 = cv2.imread("D:/test/1.jpg")#絕對路徑,推薦
img2 = cv2.imread("D:\\test\\2.jpg")#通常是兩個斜線,單右斜線會被當成轉義符
img3 = cv2.imread("3.jpeg")#相對路徑,將圖片放在py文件對應目錄下

cv2.imshow("test1", img1)
cv2.imshow("test2", img2)
cv2.imshow("test3", img3)
cv2.waitKey(0)#沒有這一句圖片會一閃而過
##waitkey(delay=0),等待用戶輸入按鍵,返回該按鍵的值

2.保存圖片

使用 cv2.write() 函數保存圖片

import cv2# 導入OpenCV包
img=cv2.imread("D:/test/3.png",cv2.IMREAD_COLOR)
cv2.imshow("test",img)#OpenCV可以實現不同格式圖片轉換,支持jpg、bmp、png等圖片格式相互無損轉換

cv2.imwrite("D:/test/3.1.png",img)#將改變後的圖像保存
cv2.imwrite("D:/test/3.2.bmp",img)
cv2.waitKey(0)

3.截取部分圖像

import cv2
img   = cv2.imread("D:\\test\\2.jpg")
frame = img[200:400,200:400] #截取部分圖像,200-400行,200-400列

cv2.imshow("test",frame)#顯示截取後的圖像
cv2.waitKey(0)

4.圖片翻轉

使用cv2.flip(img,flipcode)來進行圖片翻轉
flipcode控制圖片翻轉方向

import cv2

img=cv2.imread("D:/test/5.jpg",cv2.IMREAD_COLOR)

flipCode1=1#大於0左右翻轉
flipCode2=0#等於0上下翻轉
flipCode3=-1#小於0先上下翻轉再左右翻轉

img1 = cv2.flip(img, flipCode1)#filpCode控制圖片翻轉方向
img2 = cv2.flip(img, flipCode2)
img3 = cv2.flip(img, flipCode3)

cv2.imshow("test",img)
cv2.imshow("test1",img1)
cv2.imshow("test2",img2)
cv2.imshow("test3",img3)
cv2.waitKey(0)

5.縮放圖片

cv2.resize(img,dsize,fx,fy),dsize和fx,fy都可以設置圖片大小,不能同時爲0

import cv2# 導入OpenCV包

img  = cv2.imread("D:/test/2.jpg",cv2.IMREAD_COLOR)
img1 = cv2.resize(img, (700, 700))#設置輸出圖片的尺寸
img2 = cv2.resize(img, None, fx=0.7, fy=0.7)#None的位置本來是輸出圖片的尺寸,這裏設置了縮放因子

#fx-水平軸上的比例因子,fy-垂直軸上的比例因子
cv2.imshow("test",  img)
cv2.imshow("test1", img1)
cv2.imshow("test2", img2)
cv2.imwrite("D:/test/resize.jpg", img1)# 保存圖像
cv2.waitKey(0)

6.轉換爲灰度圖像

cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

cv2.COLOR_RGB2GRAY表示把RGB圖像轉爲灰度圖像,2前是轉換前,2後是轉換後

import cv2#導入opencv包

#python中不需要聲明變量
img = cv2.imread("D:/test/1.jpg")#cv2.imread讀進來的圖片格式是BGR(W,H,C),而不是RGB
cv2.imshow("BGR", img)

#將圖像轉換爲RGB格式
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#因爲opencv讀取圖片是按BGR讀的,所以轉換爲RGB反而不像原圖
cv2.imshow("RGB",img1)

#將圖像轉換爲灰度圖像
img2 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
cv2.imshow("GRAY",img2)
cv2.waitKey(0)

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

import cv2
import numpy as np

img  = cv2.imread("D:/test/resize.jpg")
img2 = cv2.imread("D:/test/resize.jpg")
#imgs = np.hstack([img,img2])#在水平方向上平鋪
imgs = np.vstack([img,img2])#在豎直方向上堆疊

cv2.imshow("mutil_pic", imgs)
cv2.waitKey(0)

8.繪圖功能

import cv2
import numpy as np

img  = 255*np.ones((350,512,3),np.uint8)#unit8:0~255
#ones()爲創建一個元素均爲一的矩陣
font = cv2.FONT_HERSHEY_DUPLEX
#font = cv2.FONT_HERSHEY_COMPLEX# 設置字體

#文本          # 圖片對象、文本、    位置、 字體、字體大小、顏色、     字體粗細
cv2.putText(img, "happy day", (50,300), font, 0.8, (25, 25, 25), 2,)#顏色可以自己調整,範圍爲0-255
#線             #起點      終點       顏色    粗細
cv2.line(img, (50,310), (185,310), (0, 0,0),4)
#矩形               #左上頂點 右下頂點
cv2.rectangle(img, (80,8), (200,100), (0, 255,0),2)
#圓形             #圓心   半徑 顏色    控制是否填充 -1表示填充
cv2.circle(img,(60,60),30,(0,0,213),1)
#橢圓            #中心點   長軸 短軸 偏轉角度,起始角度,終止角度
cv2.ellipse(img,(100,300),(100,50),180,0,360,(20,213,79),1) 
cv2.imshow("Draw", img)
cv2.waitKey(0)


1.np.vstack([img1,img2]) 當img1和img2圖片矩陣維度相同時才能堆疊

2.除了imread,imwrite 函數沒有返回值以外,flip,resize,cvtColor,vstack,hstack都有返回一個圖片回來。

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