今天這一篇文章主要記錄一下OpenCV中一些基本的操作,包括讀取圖片,視頻以及反轉(zhuǎn)圖像的幾種操作:
一:圖片的載入
圖片載入很常用,很實(shí)用。。。
二:讀取視頻
讀取視頻分為從攝像頭中讀入和從硬盤(pán)中讀入,如果是攝像頭就在videocapture函數(shù)中填寫(xiě)數(shù)值,0是默認(rèn)的第一個(gè)攝像頭,1.是第二個(gè),以此類(lèi)推,如果沒(méi)有外置攝像頭,就直接“”填寫(xiě)路徑就行。
三:打印圖片的類(lèi)型
圖片的信息主要包括圖片的類(lèi)型,圖片的尺寸,圖片的長(zhǎng)寬高以及通道數(shù),如果是彩色圖片通道數(shù)就是3,如果是黑白的圖片通道數(shù)為1。
我這里定義了一個(gè)函數(shù)來(lái)輸出圖片的信息:
這里可以看到:
圖片的大小是589*646的彩色3通道圖片,編碼方式是uint8.
四:圖像的對(duì)比度轉(zhuǎn)換
我們知道圖像的像素?cái)?shù)是從0-255,如果實(shí)現(xiàn)圖像的反轉(zhuǎn)只需要遍歷每個(gè)像素然后每個(gè)像素減去255即可,這里用一個(gè)笨方法實(shí)現(xiàn)以下:
得出的結(jié)果是這樣:
似乎轉(zhuǎn)換了以后的圖片還挺好看的。
當(dāng)然,這樣的方法太過(guò)于復(fù)雜,并且執(zhí)行時(shí)間,效率都很低:
用時(shí)長(zhǎng)達(dá)4555毫秒。。。
這時(shí)候我們使用OpenCV自帶的bitwise_not函數(shù):
因?yàn)榈讓邮鞘褂玫?a href="http://wenjunhu.com/tags/C++/" target="_blank">C++語(yǔ)言進(jìn)行封裝,所以執(zhí)行快得多,來(lái)對(duì)比下:
同樣的一張圖只需要17ms,舒服多了。
五:時(shí)間消耗的計(jì)算
上圖中的測(cè)試時(shí)間的計(jì)算用到了兩個(gè)函數(shù):
GetTickcount函數(shù):它返回從操作系統(tǒng)啟動(dòng)到當(dāng)前所經(jīng)歷的計(jì)時(shí)周期數(shù)
GetTickFrequency函數(shù):返回每秒的計(jì)時(shí)周期數(shù)
使用的方法:
t1 = cv.getTickCount()
#你需要的測(cè)試的函數(shù)或代碼
t2 = cv.getTickCount()
time = (t2-t1)/cv.getTickFrequency()
print("time:%s ms"%(time*1000))
最后,附上完整代碼,方便大家復(fù)現(xiàn),下一篇文章就要開(kāi)始學(xué)習(xí)圖像色彩空間的轉(zhuǎn)換,還需努力。如果有任何問(wèn)題歡迎在底下評(píng)論,我們一起交流,一起加油!
import cv2 as cvimport numpy as np def access_pixel(image):#屬性的讀取 print(image.shape) height = image.shape[0] width = image.shape[1] channels = image.shape[2] print("width: %s, height: %s, channels: %s"%(width,height,channels)) #遍歷每一個(gè)像素點(diǎn),太慢了,更新 for row in range(height): for col in range(width): for c in range(channels): pv = image[row,col,c] image[row,col,c] = 255-pv cv.imshow("numpy_test",image) def inverse(img): dis = cv.bitwise_not(img) cv.imshow("inverse",dis) def create_image(): ''' img = np.zeros([400,400,4],np.uint8) img[ :, :,0] = np.ones([400,400])*255 #對(duì)通道進(jìn)行賦值,0是藍(lán)通道,1是綠通道,2是紅色通道,多通道 cv.imshow("new_image",img) ''' #初始化灰度圖像 img2 = np.zeros([400,400,1],np.uint8) img2[:,:,0] = np.ones([400,400])*127 #img2 = img2*127 cv.imshow("new_image_2",img2) #維度變換 m1 = np.ones([3,3],np.uint8) m1.fill(12222.388) print(m1) m2 = m1.reshape([1,9]) print(m2) print("---------HELLO-----PYTHON--------------------")src = cv.imread("D:/1.png")cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)cv.imshow("input image",src)t1 = cv.getTickCount()#access_pixel(src)#create_image()inverse(src)t2 = cv.getTickCount()#測(cè)試時(shí)間消耗time = (t2-t1)/cv.getTickFrequency()print("time:%s ms"%(time*1000))cv.waitKey(0)cv.destroyAllWindows()
責(zé)任編輯:xj
原文標(biāo)題:【CV學(xué)習(xí)筆記】OpenCV基本操作
文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
CV
+關(guān)注
關(guān)注
0文章
53瀏覽量
16863 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68628 -
OpenCV
+關(guān)注
關(guān)注
31文章
635瀏覽量
41355
原文標(biāo)題:【CV學(xué)習(xí)筆記】OpenCV基本操作
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論