一、什么是計(jì)算機(jī)視覺
計(jì)算機(jī)視覺是一門研究如何使機(jī)器“看”的科學(xué),更進(jìn)一步的說,就是是指用攝影機(jī)和電腦代替人眼對目標(biāo)進(jìn)行識別、跟蹤和測量等機(jī)器視覺,并進(jìn)一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。作為一個(gè)科學(xué)學(xué)科,計(jì)算機(jī)視覺研究相關(guān)的理論和技術(shù),試圖建立能夠從圖像或者多維數(shù)據(jù)中獲取‘信息’的人工智能系統(tǒng)。這里所指的信息指Shannon定義的,可以用來幫助做一個(gè)“決定”的信息。因?yàn)楦兄梢钥醋魇菑母泄?a target="_blank">信號中提取信息,所以計(jì)算機(jī)視覺也可以看作是研究如何使人工系統(tǒng)從圖像或多維數(shù)據(jù)中“感知”的科學(xué)。 視覺是各個(gè)應(yīng)用領(lǐng)域,如制造業(yè)、檢驗(yàn)、文檔分析、醫(yī)療診斷,和軍事等領(lǐng)域中各種智能/自主系統(tǒng)中不可分割的一部分。由于它的重要性,一些先進(jìn)國家,例如美國把對計(jì)算機(jī)視覺的研究列為對經(jīng)濟(jì)和科學(xué)有廣泛影響的科學(xué)和工程中的重大基本問題,即所謂的重大挑戰(zhàn)(grand challenge)。 計(jì)算機(jī)視覺的挑戰(zhàn)是要為計(jì)算機(jī)和機(jī)器人開發(fā)具有與人類水平相當(dāng)?shù)囊曈X能力。機(jī)器視覺需要圖象信號,紋理和顏色建模,幾何處理和推理,以及物體建模。一個(gè)有能力的視覺系統(tǒng)應(yīng)該把所有這些處理都緊密地集成在一起。
二、圖片處理基礎(chǔ)操作
首先我們來看一段簡單的計(jì)算機(jī)視覺相關(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)圖像。接下來我們講解一下每一步的相關(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])
如果沒有這個(gè)限制,那么顯示的圖像就會一閃而過,就會發(fā)生錯(cuò)誤。其中delay參數(shù)包括:dealy=0,無限等待圖像顯示,直到關(guān)閉。也是waitKey的默認(rèn)數(shù)值。delay<0,等待鍵盤點(diǎn)擊結(jié)束圖像顯示,也就是說當(dāng)我們敲擊鍵盤的時(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
三、圖像處理入門基礎(chǔ)
圖像成像原理介紹
首先我們第一個(gè)要深深深深的刻在腦子里的概念就是:

圖像分類
圖像一般分為三類:一、二值圖像
二值圖像表示的意思就是每一個(gè)像素點(diǎn)只由0和1構(gòu)成,0表示黑色,1表示白色,而且這里的黑色和白色是純黑和純白。所以我們看到的圖像也就是這個(gè)樣子。我們以官網(wǎng)麗娜為例子。


灰度圖像就是一個(gè)8位的位圖。什么意思呢?就是說00000001一直到11111111,這就是二進(jìn)制表示。如果表示成我們常用的十進(jìn)制就是0-255。其中0就表示純黑色,255就表示純白色,中間就是處于純黑色到純白色的相關(guā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ù)值。
修改像素
直接暴力修改。 對于灰度圖像, img[88,99]=255 對于彩色圖像, img[88,99,0]=255 img][88,99,1]=255 img[88,99,2]=255這里也可以寫成 img[88,99]=[255,255,255]等同于上方。 改動多個(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) 對于彩色圖像我們還是: 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) 對于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))
通過這段代碼我們就可以看得出來像素的更改。 對于彩色圖像也是一樣。
五、獲取圖像屬性
形狀
shape可以獲取圖像的形狀,返回值包含行數(shù)、列數(shù)通道數(shù)的元組。 灰度圖像返回行數(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ù)圖像類型
dtype返回的是圖像的數(shù)據(jù)類型import cv2
img=cv2.imread('圖像名稱')
print(img.dtype)
六、圖像ROI
ROI(region of interest)表示感興趣區(qū)域-
從被處理的圖像中以方框、圓、橢圓或者不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域。
-
可以通過各種算子(operator)和函數(shù)來求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()

七、通道的拆分與合并
拆分import cv2
img=cv2.imread('圖像名')
b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]
我們在OpenCV中有專門拆分通道的函數(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ìn)行merge合并就可以得到以下結(jié)果:

審核編輯 :李倩
-
機(jī)器視覺
+關(guān)注
關(guān)注
163文章
4514瀏覽量
122321 -
計(jì)算機(jī)視覺
+關(guān)注
關(guān)注
9文章
1706瀏覽量
46580 -
圖片處理
+關(guān)注
關(guān)注
0文章
17瀏覽量
7207
原文標(biāo)題:計(jì)算機(jī)視覺及其圖像處理操作
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論