數(shù)據(jù)的讀取
cv2.IMREAD_COLOR:彩色圖像
cv2.IMREAD_GRAYSCALE:灰度圖像
import cv2
img = cv2.imread('E:/opencv/open-cv/2-7/cat.jpg',1)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imread()讀取圖片,當(dāng)括號(hào)里面是1時(shí),也就是替代了cv2.IMREAD_COLOR,得到彩色圖。

cv2.imread()讀取圖片,當(dāng)括號(hào)里面是0時(shí),替代了cv2.IMREAD_GRAYSCALE,得到灰度圖。

cv.inshow()函數(shù)為創(chuàng)建一個(gè)展示窗口,括號(hào)里面分別為圖片名字和讀取哪個(gè)圖片。
cv2.waitKey(0) 等待時(shí)間多久,其中括號(hào)中0表示任意鍵可以中止顯示圖片。
cv2.destroyAllWindows() 關(guān)閉窗口。
2.opencv圖片顏色轉(zhuǎn)換
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img=cv2.imread('E:/opencv/open-cv/2-7/cat.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("img_gray", img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
由于cv2讀取的圖像格式為BGR,而Matplotlib畫(huà)的是RGB,因此需要對(duì)格式進(jìn)行轉(zhuǎn)換。
cv2.COLOR_BGR2GRAY轉(zhuǎn)化成灰度圖,cv2.COLOR_BGR2RGB轉(zhuǎn)換成RGB圖,cv2.COLOR_BGR2HSV轉(zhuǎn)換成HSV圖。
其中HSV分別表示如下,轉(zhuǎn)換圖片也如下圖所示:
H - 色調(diào)
S - 飽和度
V值(強(qiáng)度)

3.圖像保存
cv2.inwrite('cat.png',img_gray)
img_gray.type()
只需要輸入cv2.inwrite()函數(shù)即可保存圖像。
img_gray.type()可以查看數(shù)據(jù)類(lèi)型
4.視頻圖像的讀取
vc = cv2.VideoCapture('E:/opencv/open-cv/2-7/test.mp4')
cv2.VideoCapture()函數(shù)用來(lái)捕捉攝像頭,控制不同的設(shè)備。
if vc.isOpened():
open, frame =vc.read()
else:
open = False
print(frame)
檢查視頻是否讀取錯(cuò)誤,其中open只有兩個(gè)值要么True,要么是False;frame為讀取一幀一幀的值。
while open:
ret, frame = vc.read()
#print(ret)
if frame is None:
break
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('result',gray)
if cv2.waitKey(20)& 0xFF==27:
break
vc.release()
cv2.destroyAllWindows()
其中cv2.waitKey(20)& 0xFF==27,這句就是如果期間有按鍵按下返回的值就是按下按鍵的ASCII值,就比如esc鍵的ASCII值是27,cv2.waitKey(20) & 0xFF==27就是當(dāng)按下按鍵是esc的時(shí)候返回true。0xFF意思是16進(jìn)制的FF也就是八位2進(jìn)制數(shù)1111 1111,如果引入& 0xFF==27 那么得出的結(jié)果永遠(yuǎn)是后八位,這樣就可以排除其他按鍵的干擾。
vc.release() 釋放硬件資源。
5.截取圖像操作
import cv2
img = cv2.imread('E:/opencv/open-cv/2-7/dog.jpg',1)
dog = img[0:200,0:200]
cv2.imshow("img", dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
截取狗狗圖像對(duì)比如下:

原始狗狗圖像

截取的狗狗圖像
6.提取顏色通道
其中一張圖片b,g,r的shape值是一樣的。利用cv2.merge((b,g,r))函數(shù)是可以重構(gòu)圖像顏色通道。
b,g,r = cv2.split(img)
只保留一個(gè)通道。b,g,r分別代號(hào)為0,1,2,下面保留r通道。
img1 = img.copy()
img1[:,:,0]=0
img1[:,:,1]=0
cv2.imshow('r',img1)

只保留R通道
7.圖像邊界填充
#邊界填充
top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)
replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT)
reflect_101 = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_WRAP)
constant = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_CONSTANT)
#繪制子圖
plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title("REPLICATE")
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect_101, 'gray'), plt.title("REFLECT_101")
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title("CONSTANT")
plt.show()
borderType:圖像填充的方法。
BORDER_REPLICATE:復(fù)制法,也就是復(fù)制最邊緣像素。
BORDER_REFLECT:反射法,對(duì)感興趣的圖像中的像素在兩邊進(jìn)行復(fù)制
BORDER_REFLECT_101:反射法,也就是以最邊緣像素為軸,對(duì)稱(chēng)。
BORDER_WRAP:外包裝法。
BORDER_CONSTANT:常量法,常數(shù)值填充,需要在設(shè)置一個(gè)value值,已顯示填充的顏色。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-451681.html
展示圖如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-451681.html

到了這里,關(guān)于opencv學(xué)習(xí)(一)圖像的基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!