在開始之前我們先來說一下彩色影象的組成:我們現在看到的所有彩色影象都是可以由三原色按照一定的比例混合得來的,也就是說只要我們知道了三原色的比例,就可以調製出某種顏色。我們用小方塊組合在一起,許許多多的小方塊就可以拼湊出乙個影象來,所以我們就有了用陣列來表示影象的乙個方法。所以我們在下面的對於彩色影象的處理中就可以建立乙個三維陣列[長、寬、3(這個三就是指三種顏色)],然後這裡很多都用rgb編碼
:red、green和blue即紅綠藍。得到他們的比例我們就可以得到乙個顏色了。在**中如果用黑白影象來表示的話我們就可以分為01黑白影象
和灰度值影象
01黑白影象中我們只有0和1,所以表示的不是很清楚,在灰度值影象和rgb影象中我們把影象分為255個等級,數字越大則顏色越淺,最深的0代表黑色,最淺的255代表白色或紅色、藍色和綠色,下面我們來看**:
import cv2 as cv
import numpy as np
defaccess_pixels
(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)
)#列印出這三個值
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(
"pixels_demo"
,image)
defcreate_image()
:#這個函式用來自定義乙個影象
# img=np.zeros([400,400,3],np.uint8)
# #img[:,:,0]=np.ones([400,400])*255
# img[:, :, 0] = np.ones([400, 400]) * 255
# cv.imshow("new image:",img)
#上面這些**用來建立乙個彩色影象,正如開頭所說,255代表最淺的顏色,當然這裡也可以乘以[0,255]之間任意乙個數字
# img=np.zeros([400,400,1],np.uint8)
# img[ : , : ,0]=np.ones([400,400])
# img=np.array(img,dtype=np.uint8)
# cv.imshow("new image",img)
#上面**用來建立乙個黑白但不是二值的影象,也就是說它會有顏色的深淺,不是簡單的黑白,還有灰色在內,同樣取值也在[0,255]之間,數值越大顏色越淺
m1=np.ones([3
,3],np.float32)
#也可以支援uint、int32,當他為int32時最大值也會發生變化,也就是說它會根據資料型別的不同而有不同的範圍
#這裡記住一定要變成uint8型,不然顯示會報錯
m1.fill(
122.388
)print
(m1)
m2=m1.reshape([1
,9])
#這裡說一下reshape可以重組numpy陣列
print
(m2)
src=cv.imread(r"c:\users\dell\desktop\tim20180421221302.png"
)#blue gree red
cv.namedwindow(
"impot image"
,cv.window_autosize)
#cv.namedwindow("impot image",cv.window_normal)
cv.imshow(
"input image"
,src)
t1=cv.gettickcount(
)create_image(
)access_pixels(src)
t2=cv.gettickcount(
)print
("time:%ds"%(
(t2-t1)
/cv.gettickfrequency())
)cv.waitkey(0)
cv.destroyallwindows(
)#
有關opencv與其中常見的numpy OpenCV開操作與閉操
一 概述 腐蝕 用區域性極小值替換錨點畫素值 膨脹 用區域性極大值替換錨點畫素值 開操作 相當於先腐蝕再膨脹 erode dilate 閉操作 相當於先膨脹再腐蝕 dilate erode 開操作使用的原圖 閉操作使用的原圖 二 示例 開操作的 這裡需要注意結構元素的大小,在下面的圖中結構元素不能太...
Opencv學習筆記 numpy的基本陣列操作
為什麼使用numpy作影象處理的計算操作?numpy是使用python進行科學計算的基礎包,相對於不使用numpy的迴圈遍歷畫素操作,numpy的運算效率和速度非常快,所以numpy的基本陣列操作需要會,之前學的不夠明白,最近看opencv看到後面覺得有必要重新看一下再做個總結。shape操作 sh...
python list與numpy陣列效率比較
因為經常一訓練就是很多次迭代,所以找到效率比較高的操作能大大縮短執行時間,但這方面資料不足,所以自己記錄總結一下,有需要再補充 有時候我需要乙個陣列,然後可能會頻繁從中索引資料,那麼我選擇list還是numpy array呢,這裡做了乙個簡單的實驗進行比較,環境python 3.6 import r...