一、imread
Mat imread(const String& filename,int flags = IMREAD_COLOR);
返回Mat對象;
參數filename: 待打開圖片的絕對地址,需要注意的是,並不是所有文件都可以用它打開,它支持的文件如下;函數識別不是依靠文件的後綴名,而是依靠內容的編碼格式;
需要注意的是imread讀取數據時會重新排列數據。
- Windows bitmaps - *.bmp, *.dib (always supported)
- JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
- JPEG 2000 files - *.jp2 (see the Notes section)
- Portable Network Graphics - *.png (see the Notes section)
- WebP - *.webp (see the Notes section)
- Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
- Sun rasters - *.sr, *.ras (always supported)
- TIFF files - *.tiff, *.tif (see the Notes section)
- OpenEXR Image files - *.exr (see the Notes section)
- Radiance HDR - *.hdr, *.pic (always supported)
- Raster and Vector geospatial data supported by Gdal (see the Notes section)
參數flags:打開的參數,這個非常重要,因爲如果設置不合適的話,很容易出現預想之外的效果。它可以指導將原圖讀取時進行一定的轉換。默認值是IMREAD_LOAD_GDAL。因此,如果是想直接處理原圖,應該設置爲IMREAD_UNCHANED。
常用的一般是下面三種
- IMREAD_UNCHANGED 保持原來的圖像
- If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
- IMREAD_GRAYSCALE 灰度圖像
- If set, always convert image to the single channel grayscale image.
- IMREAD_COLOR 彩色圖像
- If set, always convert image to the 3 channel BGR color image.
當然爲了簡單起見,我們可以用數字設置,如果寫爲1最後輸出就顯示原圖,如果寫爲0,最後輸出就顯示灰度圖。
二、imshow
cv2.imShow(const string& winname, InputArray mat)
函數可以在窗口中顯示圖像。該窗口和圖像的原始大小自適應(自動調整到原始尺寸)。
- 第一個參數,const string&類型的winname,填需要顯示的窗口標識名稱。
- 第二個參數,InputArray 類型的mat,填需要顯示的圖像。
imshow 函數用於在指定的窗口中顯示圖像。如果窗口是用CV_WINDOW_AUTOSIZE(默認值)標誌創建的,那麼顯示圖像原始大小。否則,將圖像進行縮放以適合窗口。而imshow 函數縮放圖像,取決於圖像的深度:
- 如果載入的圖像是8位無符號類型(8-bit unsigned),就顯示圖像本來的樣子。
- 如果圖像是16位無符號類型(16-bit unsigned)或32位整型(32-bit integer),便用像素值除以256。也就是說,值的範圍是[0,255 x 256]映射到[0,255]。
- 如果圖像是32位浮點型(32-bit floating-point),像素值便要乘以255。也就是說,該值的範圍是[0,1]映射到[0,255]。
三、waitKey
cv2.waitKey(ms)
是一個和鍵盤綁定的函數,它的作用是等待一個鍵盤的輸入(因爲我們創建的圖片窗口如果沒有這個函數的話會閃一下就消失了,所以如果需要讓它持久輸出,我們可以使用該函數)。它的參數是毫秒級。該函數等待任何鍵盤事件的指定毫秒。Ms=0如果您在此期間按下任何鍵,程序將繼續進行。我們也可以將其設置爲一個特定的鍵。
四、destroyALLWindows
cv2.destroyWindow()
銷燬我們創建的所有窗口。如果要銷燬任何特定窗口,請使用函數cv2.destroyWindow(),其中傳遞確切的窗口名稱作爲參數。(應該是使用創建窗口時所使用的窗口名稱,字符串類型。)
五、namedWindow
顧名思義,namedWindow函數,用於創建一個窗口。函數原型是這樣的:
void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
第一個參數,const string&型的name,即填被用作窗口的標識符的窗口名稱。
第二個參數,int 類型的flags ,窗口的標識,可以填如下的值:
- WINDOW_NORMAL設置了這個值,用戶便可以改變窗口的大小(沒有限制)
- WINDOW_AUTOSIZE如果設置了這個值,窗口大小會自動調整以適應所顯示的圖像,並且不能手動改變窗口大小。
- WINDOW_OPENGL 如果設置了這個值的話,窗口創建的時候便會支持OpenGL。
函數剖析:
- 首先需要注意的是,它有默認值WINDOW_AUTOSIZE,所以,一般情況下,這個函數我們填一個變量就行了。
- namedWindow函數的作用是,通過指定的名字,創建一個可以作爲圖像和進度條的容器窗口。如果具有相同名稱的窗口已經存在,則函數不做任何事情。
- 我們可以調用destroyWindow()或者destroyAllWindows()函數來關閉窗口,並取消之前分配的與窗口相關的所有內存空間。
- 但話是這樣說,其實對於代碼量不大的簡單小程序來說,我們完全沒有必要手動調用上述的destroyWindow()或者destroyAllWindows()函數,因爲在退出時,所有的資源和應用程序的窗口會被操作系統會自動關閉。
六、imwrite
在OpenCV中,輸出圖像到文件,我們一般都用imwrite函數,它的聲明如下:
bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() );
- 第一個參數,const string&類型的filename,填需要寫入的文件名就行了,帶上後綴,比如,“123.jpg”這樣。
- 第二個參數,InputArray類型的img,一般填一個Mat類型的圖像數據就行了。
- 第三個參數,const vector<int>&類型的params,表示爲特定格式保存的參數編碼,它有默認值vector<int>(),所以一般情況下不需要填寫。
七、split
b,g,r=cv2.split(img)
我之前說過彩色圖像是由BGR三個通道組成的,也就是三個0-255的數組
如果把彩色圖片拆分後,那麼得到的應該是三張灰色圖像
八、merge
BGR=cv2.merge([b,g,r])
與split恰恰相反,把三個通道的顏色合成圖像
九、addWeighted
addWeighted( src1, alpha, src2, beta, 0.0, dst)
- 第1個參數,輸入圖片1,
- 第2個參數,圖片1的融合比例
- 第3個參數,輸入圖片2
- 第4個參數,圖片2的融合比例
- 第5個參數,偏差,不能省略
- 第6個參數,輸出圖片,可選
計算的方式如下:
十、CvtColor
函數形式: void cvCvtColor( const CvArr* src, CvArr* dst, int code );
參數列表:
src:源圖像(輸入的 8-bit , 16-bit 或 32-bit 單倍精度浮點數影像)
dst:目標圖像(輸入的 8-bit , 16-bit 或 32-bit 單倍精度浮點數影像)
code:轉換代碼
- 彩色轉換灰度:COLOR_BGR2GRAY
- BGR轉換RGB:COLOR_BGR2RGB
- 灰度轉彩色:COLOR_GRAY2BGR
十一、resize
- cv2.resize(scr,dsize);
scr:原始圖像
dsize:縮放的大小,(a,b)a是代表有多少列,b代表多少行
2. cv2.resize(scr,dsize,fx,fy);
scr:原始圖像
dsize爲空時,fx,fy表示縮放爲原來的倍數(可以小於1)
十二、flip
flip(src,flipCode);
src:原始圖像
flipCode:
- =0:上下翻轉
- >0:左右翻轉
- <0:先水平上下翻轉再左右翻轉
十三、threshold
ret, dst = cv2.threshold(src, thresh, maxval, type)
src: 輸入圖,只能輸入單通道圖像,通常來說爲灰度圖
dst: 輸出圖
thresh: 閾值=ret,一般情況指定128
maxval: 當像素值超過了閾值(或者小於閾值,根據type來決定),所賦予的值
type:二值化操作的類型,包含以下5種類型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
- cv2.THRESH_BINARY 超過閾值部分取maxval(最大值),否則取0
- cv2.THRESH_BINARY_INV THRESH_BINARY的反轉
- cv2.THRESH_TRUNC 大於閾值部分設爲閾值,否則不變
- cv2.THRESH_TOZERO_INV THRESH_TOZERO的反轉
- cv2.THRESH_TOZERO 大於閾值部分不改變,否則設爲0
十四、boxFilter
boxFilter(原始圖像,目標圖像深度,核大小,normalize屬性);
- 目標圖像深度一般爲-1,表示與原始圖像保持一致
- 核大小就是對周圍取值的範圍
- normalize屬性:是否進行歸一化處理,歸一化代表取均值=均值濾波;不進行歸一化的話就是取和,容易溢出,就是和很容易大於255
十五、GaussianBlur
GaussianBlur(str,ksize,sigmax)
str:原始圖像
ksize:核大小,必須是奇數
sigmax:X方向的方差,控制權重,一般取0,自動根據核大小計算
十六、medianBlur
相當於用中值代替
medianBlur(img, Ksize)
Ksize:核大小,必須是大於1的奇數
十七、erode
cv2.erode(scr,kernel,iterations)
scr:原始圖像
kernel:卷積核,正方形,生成方式np.ones((5,5),np.uint8)
iteration:迭代次數,默認爲1
十八、dilate
cv2.dilate(scr,kernel,iterations)
scr:原始圖像
kernel:卷積核,正方形,生成方式np.ones((5,5),np.uint8)
iteration:迭代次數,默認爲1
十九、morphologyEx
開運算就是先腐蝕再膨脹,去掉噪聲在還原
cv2.morphologyEx(img,cv2.MORPH_OPEN, kernel)
cv2.MORPH_OPEN:開運算
閉運算先膨脹再腐蝕
cv2.morphologyEx(img,cv2.MORPH_CLOSE, kernel)
cv2.MORPH_CLOSE:閉運算
梯度操作
梯度=膨脹-腐蝕
得到圖像輪廓
cv2.morphologyEx(img,cv2.MORPH_GRADIENT, kernel)
cv2.MORPH_GRADIENT:梯度操作
禮帽操作
禮帽操作=原始圖像-開運算圖像
最終得到的就是噪聲
cv2.morphologyEx(img,cv2.MORPH_TOPHAT, kernel)
cv2.MORPH_TOPHAT:禮帽操作
黑帽操作
黑帽操作=閉運算-原始輸入
最終得到的就是噪聲
cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.MORPH_BLACKHAT:黑帽操作