一、什么是計(jì)算機(jī)視覺(jué)
計(jì)算機(jī)視覺(jué)是一門(mén)研究如何使機(jī)器“看”的科學(xué),更進(jìn)一步的說(shuō),就是是指用攝影機(jī)和電腦代替人眼對(duì)目標(biāo)進(jìn)行識(shí)別、跟蹤和測(cè)量等機(jī)器視覺(jué),并進(jìn)一步做圖形處理,使電腦處理成為更適合人眼觀(guān)察或傳送給儀器檢測(cè)的圖像。作為一個(gè)科學(xué)學(xué)科,計(jì)算機(jī)視覺(jué)研究相關(guān)的理論和技術(shù),試圖建立能夠從圖像或者多維數(shù)據(jù)中獲取‘信息’的人工智能系統(tǒng)。這里所指的信息指Shannon定義的,可以用來(lái)幫助做一個(gè)“決定”的信息。因?yàn)楦兄梢钥醋魇菑母泄?a target="_blank">信號(hào)中提取信息,所以計(jì)算機(jī)視覺(jué)也可以看作是研究如何使人工系統(tǒng)從圖像或多維數(shù)據(jù)中“感知”的科學(xué)。
視覺(jué)是各個(gè)應(yīng)用領(lǐng)域,如制造業(yè)、檢驗(yàn)、文檔分析、醫(yī)療診斷,和軍事等領(lǐng)域中各種智能/自主系統(tǒng)中不可分割的一部分。由于它的重要性,一些先進(jìn)國(guó)家,例如美國(guó)把對(duì)計(jì)算機(jī)視覺(jué)的研究列為對(duì)經(jīng)濟(jì)和科學(xué)有廣泛影響的科學(xué)和工程中的重大基本問(wèn)題,即所謂的重大挑戰(zhàn)(grand challenge)。
計(jì)算機(jī)視覺(jué)的挑戰(zhàn)是要為計(jì)算機(jī)和機(jī)器人開(kāi)發(fā)具有與人類(lèi)水平相當(dāng)?shù)囊曈X(jué)能力。機(jī)器視覺(jué)需要圖象信號(hào),紋理和顏色建模,幾何處理和推理,以及物體建模。一個(gè)有能力的視覺(jué)系統(tǒng)應(yīng)該把所有這些處理都緊密地集成在一起。
我們目前如果是在校學(xué)生,對(duì)于計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)的相關(guān)知識(shí)的學(xué)習(xí)是非常有用的,無(wú)論是對(duì)于自己的工作前景還是相關(guān)論文的撰寫(xiě)都是非常有用的,而且目前對(duì)于計(jì)算機(jī)的相關(guān)知識(shí)已經(jīng)設(shè)計(jì)到了各個(gè)專(zhuān)業(yè)領(lǐng)域,其中包括醫(yī)學(xué)領(lǐng)域(計(jì)算機(jī)視覺(jué)分析CT成像)、電學(xué)領(lǐng)域(使用matlab及相關(guān)領(lǐng)域畫(huà)圖)、人臉識(shí)別和車(chē)牌識(shí)別等等。而且有想要做交叉學(xué)科的對(duì)于計(jì)算機(jī)可以和任意領(lǐng)域及進(jìn)行無(wú)障礙交叉。
由于我這個(gè)理工男的語(yǔ)文功底并不好,語(yǔ)言組織能力不強(qiáng),所以我們今天就啰嗦到這里,總結(jié)一下就是計(jì)算機(jī)視覺(jué)及機(jī)器學(xué)習(xí)等和計(jì)算機(jī)相關(guān)的東西特別重要!
二、圖片處理基礎(chǔ)操作
首先我們來(lái)看一段簡(jiǎn)單的計(jì)算機(jī)視覺(jué)相關(guān)代碼:
import cv2img=cv2.imread(‘path’)#path指圖片相關(guān)路徑cv2.imshow(‘Demo’,img)cv2.nameWindow(‘Demo’)cv2.waitKey(0)cv2.destroyAllWindows()
這段代碼就可以在計(jì)算機(jī)中顯示出img的相關(guān)圖像。接下來(lái)我們講解一下每一步的相關(guān)操作。
圖片處理:讀入圖像
相關(guān)函數(shù):image=cv2.imread(文件名相關(guān)路徑[顯示控制參數(shù)])
文件名:完整的路徑。
其中參數(shù)包括:
cv.IMREAD_UNCHANGED :表示和原圖像一致
cv.IMREAD_GRAYSCALE : 表示將原圖像轉(zhuǎn)化為灰色圖像。
cv.IMREAD_COLOR:表示將原圖像轉(zhuǎn)化為彩色圖像。
例如:
cv2.imread(‘d:image.jpg’,cv.IMREAD_UNCHANGED)
圖片處理:顯示圖像
相關(guān)函數(shù):None=cv2.imshow(窗口名,圖像名)例如:
cv2.imshow(“demo”,image)但是在OpenCV中我們圖像顯示還是要加上相關(guān)約束:
retval=cv2.waitKey([delay])如果沒(méi)有這個(gè)限制,那么顯示的圖像就會(huì)一閃而過(guò),就會(huì)發(fā)生錯(cuò)誤。其中delay參數(shù)包括:dealy=0,無(wú)限等待圖像顯示,直到關(guān)閉。也是waitKey的默認(rèn)數(shù)值。delay《0,等待鍵盤(pán)點(diǎn)擊結(jié)束圖像顯示,也就是說(shuō)當(dāng)我們敲擊鍵盤(pán)的時(shí)候,圖像結(jié)束顯示。delay》0,等待delay毫秒后結(jié)束圖像顯示。最后我們還需要顯示
cv2.destroyAllWindows()
把圖像從內(nèi)存中徹底刪除。
圖片處理:圖像保存
相關(guān)函數(shù):retval=cv2.imwrite(文件地址,文件名)
例如
cv2.imwrite(‘D:test.jpg’,img)
將img保存到了路徑D: est.jpg
三、圖像處理入門(mén)基礎(chǔ)
圖像成像原理介紹
首先我們第一個(gè)要深深深深的刻在腦子里的概念就是:
——圖片是由像素點(diǎn)構(gòu)成的生動(dòng)一點(diǎn)表示就是這樣:
這樣就可以完美的展示出計(jì)算機(jī)圖像的成像原理,就是用一個(gè)個(gè)有顏色的像素點(diǎn)拼接而成的。
圖像分類(lèi)
圖像一般分為三類(lèi):
一、二值圖像
二值圖像表示的意思就是每一個(gè)像素點(diǎn)只由0和1構(gòu)成,0表示黑色,1表示白色,而且這里的黑色和白色是純黑和純白。所以我們看到的圖像也就是這個(gè)樣子。
二、灰度圖像
灰度圖像就是一個(gè)8位的位圖。什么意思呢?就是說(shuō)00000001一直到11111111,這就是二進(jìn)制表示。如果表示成我們常用的十進(jìn)制就是0-255。其中0就表示純黑色,255就表示純白色,中間就是處于純黑色到純白色的相關(guān)顏色。
灰度圖像一塊像素點(diǎn):
三、彩色圖像(RGB)計(jì)算機(jī)中所有的顏色都可以由R(紅色通道)、G(綠色通道)、B(藍(lán)色通道)來(lái)組成,其中每一個(gè)通道都有0-255個(gè)像素顏色組成。比如說(shuō)R=234,G=252,B=4就表示黃色。顯示出來(lái)的也是黃色。所以說(shuō)彩色圖像由三個(gè)面構(gòu)成,分別對(duì)應(yīng)R,G,B。
所以說(shuō)我們就可以知道復(fù)雜程度排序的話(huà)就是:彩色圖像-灰度圖像-二值圖像。所以我們?cè)谶M(jìn)行人臉項(xiàng)目或者是車(chē)牌識(shí)別項(xiàng)目中最最最常用的操作就是將彩色圖像轉(zhuǎn)化為灰度圖像,然后將灰度圖像轉(zhuǎn)為最簡(jiǎn)單的二值圖像。
四、像素處理操作
讀取像素
相關(guān)函數(shù):返回值=圖像(位置參數(shù)) 我們先以灰度圖像,返回灰度值:
p=img[88,142]print§
這里我們就可以返回圖片坐標(biāo)[88,142]處的灰度值。然后我們以彩色圖像為例子:我們知道彩色圖像由BGR三個(gè)通道的值構(gòu)成。那么我們需要返回三個(gè)數(shù)值:
blue=img[78,125,0]green=img[78,125,1]red=img[78,125,2]print(blue,green,red)
這樣我們就返回了這三個(gè)數(shù)值。
修改像素
直接暴力修改。對(duì)于灰度圖像, img[88,99]=255對(duì)于彩色圖像,img[88,99,0]=255img][88,99,1]=255img[88,99,2]=255這里也可以寫(xiě)成img[88,99]=[255,255,255]等同于上方。改動(dòng)多個(gè)像素點(diǎn)例如還是以彩色圖像為例子:
i[100:150,100:150]=[255,255,255]
意思也就是將圖像橫坐標(biāo)100到150和縱坐標(biāo)100到150的這個(gè)區(qū)間全部用白色替代。
使用python中的numpy修改像素點(diǎn)
讀取像素 相關(guān)函數(shù):返回值=圖像.item(位置參數(shù)) 我們以灰度圖像為例: o=img,item(88,142) print(o) 對(duì)于彩色圖像我們還是: blue=img.item(88,142,0) green=img.item(88,142,1) red=img.item(88,142,2) 然后print(blue,green,red) 修改像素 圖像名.itemset(位置,新的數(shù)值) 我們以灰度圖像為例子: img.itemset((88,99),255) 對(duì)于BGR圖像: img.itemset((88,99,0),255) img.itemset((88,99,1),255) img.itemset((88,99,2),255)import cv2
import numpy as np
i=cv2.imread('path',cv2.IMREAD_UNCHANGED)
print(i.item(100,100))
i.itemset((100,100),255)
print(i,item(100,100))
通過(guò)這段代碼我們就可以看得出來(lái)像素的更改。 對(duì)于彩色圖像也是一樣。
五、獲取圖像屬性
形狀
shape可以獲取圖像的形狀,返回值包含行數(shù)、列數(shù)通道數(shù)的元組?;叶葓D像返回行數(shù)列數(shù) 彩色圖像返回行數(shù)、列數(shù)、通道數(shù)。
import cv2
img1=cv2.imread('灰度圖像')
print(img1.shape)
像素?cái)?shù)目
size可以獲取圖像的像素?cái)?shù)目。灰度圖像:行數(shù)列數(shù) 彩色圖像:行數(shù)列數(shù)*通道數(shù)
圖像類(lèi)型
dtype返回的是圖像的數(shù)據(jù)類(lèi)型
import cv2
img=cv2.imread('圖像名稱(chēng)')
print(img.dtype)
六、圖像ROI
-
從被處理的圖像中以方框、圓、橢圓或者不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域。
-
可以通過(guò)各種算子(operator)和函數(shù)來(lái)求ROI,并進(jìn)行下一步操作。
import cv2
import numpy as np
a=cv2.imread('path')
b=np.ones((101,101,3))
b=a[220:400,250:350]
a[0:101,0:101]=b
cv2.imshow('o',a)
cv2.waitKey()
cv2.destroyAllWindows()
我們還可以將感興趣的圖像加入到別的圖像當(dāng)中。
七、通道的拆分與合并
拆分
import cv2
img=cv2.imread('圖像名')
b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]
我們?cè)贠penCV中有專(zhuān)門(mén)拆分通道的函數(shù): cv2.split(img)import cv2
import numpy as np
a=cv2.imread("imagelenacolor.png")
b,g,r=cv2.split(a)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()
合并import cv2
import numpy as np
a=cv2.imread("imagelenacolor.png")
b,g,r=cv2.split(a)
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)
cv2.waitKey()
cv2.destroyAllWindows()
審核編輯:郭婷-
機(jī)器視覺(jué)
+關(guān)注
關(guān)注
161文章
4369瀏覽量
120277 -
人工智能
+關(guān)注
關(guān)注
1791文章
47183瀏覽量
238237
原文標(biāo)題:【光電智造】計(jì)算機(jī)視覺(jué)及其圖像處理操作
文章出處:【微信號(hào):今日光電,微信公眾號(hào):今日光電】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論