一、什么是計算機視覺
計算機視覺是一門研究如何使機器“看”的科學,更進一步的說,就是是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,并進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。作為一個科學學科,計算機視覺研究相關的理論和技術,試圖建立能夠從圖像或者多維數據中獲取‘信息’的人工智能系統。這里所指的信息指Shannon定義的,可以用來幫助做一個“決定”的信息。因為感知可以看作是從感官信號中提取信息,所以計算機視覺也可以看作是研究如何使人工系統從圖像或多維數據中“感知”的科學。 視覺是各個應用領域,如制造業、檢驗、文檔分析、醫療診斷,和軍事等領域中各種智能/自主系統中不可分割的一部分。由于它的重要性,一些先進國家,例如美國把對計算機視覺的研究列為對經濟和科學有廣泛影響的科學和工程中的重大基本問題,即所謂的重大挑戰(grand challenge)。 計算機視覺的挑戰是要為計算機和機器人開發具有與人類水平相當的視覺能力。機器視覺需要圖象信號,紋理和顏色建模,幾何處理和推理,以及物體建模。一個有能力的視覺系統應該把所有這些處理都緊密地集成在一起。
二、圖片處理基礎操作
首先我們來看一段簡單的計算機視覺相關代碼:
import cv2img=cv2.imread('path')#path指圖片相關路徑cv2.imshow('Demo',img)cv2.nameWindow('Demo')cv2.waitKey(0)cv2.destroyAllWindows()
這段代碼就可以在計算機中顯示出img的相關圖像。接下來我們講解一下每一步的相關操作。
圖片處理:讀入圖像
相關函數:image=cv2.imread(文件名相關路徑[顯示控制參數])
文件名:完整的路徑。
其中參數包括:
cv.IMREAD_UNCHANGED :表示和原圖像一致
cv.IMREAD_GRAYSCALE : 表示將原圖像轉化為灰色圖像。
cv.IMREAD_COLOR:表示將原圖像轉化為彩色圖像。
例如:cv2.imread(‘d:image.jpg’,cv.IMREAD_UNCHANGED)
圖片處理:顯示圖像
相關函數:None=cv2.imshow(窗口名,圖像名)例如:cv2.imshow(“demo”,image)
但是在OpenCV中我們圖像顯示還是要加上相關約束:retval=cv2.waitKey([delay])
如果沒有這個限制,那么顯示的圖像就會一閃而過,就會發生錯誤。其中delay參數包括:dealy=0,無限等待圖像顯示,直到關閉。也是waitKey的默認數值。delay<0,等待鍵盤點擊結束圖像顯示,也就是說當我們敲擊鍵盤的時候,圖像結束顯示。delay>0,等待delay毫秒后結束圖像顯示。最后我們還需要顯示
cv2.destroyAllWindows()
把圖像從內存中徹底刪除。
圖片處理:圖像保存
相關函數:retval=cv2.imwrite(文件地址,文件名)例如
cv2.imwrite(‘D:test.jpg’,img)
將img保存到了路徑D: est.jpg
三、圖像處理入門基礎
圖像成像原理介紹
首先我們第一個要深深深深的刻在腦子里的概念就是:

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


灰度圖像就是一個8位的位圖。什么意思呢?就是說00000001一直到11111111,這就是二進制表示。如果表示成我們常用的十進制就是0-255。其中0就表示純黑色,255就表示純白色,中間就是處于純黑色到純白色的相關顏色。我們還是以麗娜為例。




四、像素處理操作
讀取像素
相關函數:返回值=圖像(位置參數) 我們先以灰度圖像,返回灰度值:p=img[88,142]
print§
這里我們就可以返回圖片坐標[88,142]處的灰度值。
然后我們以彩色圖像為例子:
我們知道彩色圖像由BGR三個通道的值構成。那么我們需要返回三個數值:blue=img[78,125,0]
green=img[78,125,1]
red=img[78,125,2]
print(blue,green,red)
這樣我們就返回了這三個數值。
修改像素
直接暴力修改。 對于灰度圖像, 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]等同于上方。 改動多個像素點 例如還是以彩色圖像為例子:i[100:150,100:150]=[255,255,255]
意思也就是將圖像橫坐標100到150和縱坐標100到150的這個區間全部用白色替代。
使用python中的numpy修改像素點
讀取像素 相關函數:返回值=圖像.item(位置參數) 我們以灰度圖像為例: 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(位置,新的數值) 我們以灰度圖像為例子: 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可以獲取圖像的形狀,返回值包含行數、列數通道數的元組。 灰度圖像返回行數列數 彩色圖像返回行數、列數、通道數。import cv2
img1=cv2.imread('灰度圖像')
print(img1.shape)
像素數目
size可以獲取圖像的像素數目。 灰度圖像:行數列數 彩色圖像:行數列數*通道數圖像類型
dtype返回的是圖像的數據類型import cv2
img=cv2.imread('圖像名稱')
print(img.dtype)
六、圖像ROI
ROI(region of interest)表示感興趣區域-
從被處理的圖像中以方框、圓、橢圓或者不規則多邊形等方式勾勒出需要處理的區域。
-
可以通過各種算子(operator)和函數來求ROI,并進行下一步操作。
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中有專門拆分通道的函數: 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()
我們將上方的拆分圖像進行merge合并就可以得到以下結果:

審核編輯 :李倩
-
機器視覺
+關注
關注
162文章
4389瀏覽量
120450 -
計算機視覺
+關注
關注
8文章
1698瀏覽量
46033 -
圖片處理
+關注
關注
0文章
16瀏覽量
6880
原文標題:計算機視覺及其圖像處理操作
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論