亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

OpenCV-Python學習筆記(三):圖像的基礎操作:獲取像素值并修改

系統 2721 0

1.獲取并修改像素值

首先我們需要讀入一幅圖像,可以根據像素的行和列的坐標獲取他的像素值。對 BGR 圖像而言,返回值為 B,G,R 的值。對灰度圖像而言,會返回他的灰度值(亮度 intensity):

            
              import cv2
import numpy as np
img = cv2.imread('D:/opencv/images/roi.jpg')

# 獲取像素值
px = img[100,100]
print(px)
blue = img[100,100,0]
print(blue)

# 打印結果
## [57 63 68]
## 57

# 修改像素值
img[100,100]=[255,255,255]
print(img[100,100])

## [255 255 255]
            
          

Numpy 是經過優化了的進行快速矩陣運算的軟件包。所以我們不推薦逐個獲取像素值并修改,這樣會很慢,能用矩陣運算就不要用循環。對于獲取每一個像素值,也許使用 Numpy 的 array.item() 和 array.itemset() 會更好。但是返回值是標量。如果你想獲得所有 B, G, R 的值,你需要使用 array.item() 分割他們。獲取像素值及修改的更好方法:

            
              import cv2
import numpy as np
img = cv2.imread('D:/opencv/images/roi.jpg')
print img.item(10,10,2)
img.itemset((10,10,2),100)
print(img.item(10,10,2))

## 50
## 100
            
          

2.獲取圖像屬性
圖像的屬性包括:行,列,通道,圖像數據類型,像素數目等. img.shape 可以獲取圖像的形狀,他的返回值是一個包含行數,列數,通道數的元組。如果圖像是灰度圖,返回值僅有行數和列數。所以 通過檢查這個返回值就可以知道加載的是灰度圖還是彩色圖 img.size 可以返回圖像的像素數目。 img.dtype 返回的是圖像的數據類型。
?

注意:在debug時 img.dtype 非常重要。因為在 OpenCVPython 代碼中經常出現數據類型的不一致。

3.圖像ROI

有時你需要對一幅圖像的特定區域進行操作。例如我們要檢測一副圖像中眼睛的位置,我們首先應該在圖像中找到臉,再在臉的區域中找眼睛,而不是直接在一幅圖像中搜索。這樣會提高程序的準確性和性能。


ROI 也是使用 Numpy 索引來獲得的。現在我們選擇球的部分并把他拷貝到圖像的其他區域。

            
              import cv2
import numpy as np

img=cv2.imread('D:/opencv/images/roi.jpg')
ball=img[280:340,330:390]
img[270:330,100:160]=bal
            
          

結果如下:

OpenCV-Python學習筆記(三):圖像的基礎操作:獲取像素值并修改、獲取圖像信息、ROI、通道拆分與合并、邊界填充_第1張圖片

?

4.拆分及合并圖像通道
有時我們需要對 BGR 三個通道分別進行操作。這是你就需要把 BGR 拆分成單個通道。有時你需要把獨立通道的圖片合并成一個 BGR 圖像。可以這樣做:
拆通道:b, g, r = cv2.spilt(img)

合并通道:img = cv2.merge(b, g, r)

            
              import cv2
import numpy as np

img=cv2.imread('D:/opencv/images/roi.jpg')
b,g,r=cv2.split(img)  #拆通道
img=cv2.merge(b,g,r)  #合并通道

b = img[:, :, 0]  # 單獨拆出藍色通道

img[:, :, 2] = 0  # 將紅色通道值全部賦值為0
            
          

?注意:cv2.split() 是一個比較耗時的操作。只有真正需要時才用它,能用Numpy 索引就盡量用。

?

5.為圖像擴邊(填充)
圖像擴邊(填充),在卷積運算或 0 填充時經常被用到。如果你想在圖像周圍創建一個邊,就像相框一樣,你可以使用 cv2.copyMakeBorder()函數 。這個函數包括如下參數:

? src 輸入圖像
? top, bottom, left, right 對應邊界的像素數目。
? borderType 要添加哪種類型的邊界,類型如下:
? ? ? ? – cv2.BORDER_CONSTANT 添加有顏色的常數值邊界,還需要下一個參數(value)。
? ? ? ? – cv2.BORDER_REFLECT 邊界元素的鏡像。比如: fedcba|abcdefgh|hgfedcb
? ? ? ? – cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT跟上面一樣,但稍作改動。例如: gfedcb|abcdefgh|gfedcba
? ? ? ? – cv2.BORDER_REPLICATE 重復最后一個元素。例如: aaaaaa|abcdefgh|hhhhhhh
? ? ? ? – cv2.BORDER_WRAP 不知道怎么說了, 就像這樣: cdefgh|abcdefgh|abcdefg
? value 邊界顏色,如果邊界的類型是 cv2.BORDER_CONSTANT,需要value參數

            
              import cv2
import numpy as np
from matplotlib import pyplot as plt

BLUE=[255,0,0]

img1=cv2.imread('opencv_logo.png')

replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)

plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')

plt.show()
            
          

結果如下(由于OpenCV 中是按 BGR,matplotlib 中是按 RGB 排列,本例是使用 matplotlib 繪制,所以顯示的圖像和實際相比較交換了 R 和 B 的位置):

OpenCV-Python學習筆記(三):圖像的基礎操作:獲取像素值并修改、獲取圖像信息、ROI、通道拆分與合并、邊界填充_第2張圖片

?實際的圖標是下面這樣的:

OpenCV-Python學習筆記(三):圖像的基礎操作:獲取像素值并修改、獲取圖像信息、ROI、通道拆分與合并、邊界填充_第3張圖片

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99精品久久久久久久免费看蜜月 | 亚洲整片 | 99精品视频在线观看免费播放 | 99热这里只有精品国产动漫 | 欧美精品国产第一区二区 | 久久毛片免费看一区二区三区 | 日本人成免费大片 | 国产精品视频观看 | 好看的中文字幕在线 | 久久综合给合久久狠狠狠色97 | 国产精品777| 欧美精品成人一区二区在线观看 | 天天操天天干天天摸 | 99精品在线视频观看 | 亚洲麻豆国产精品 | 亚洲黄色自拍 | 99国产福利 | 涩涩色中文综合亚洲 | 亚洲色欲色欲www | 91视频专区 | 久久成人视 | 欧美精品在线一区二区三区 | 精品一区二区乱码久久乱码 | 九九热线精品视频18 | 久久亚洲精品国产精品婷婷 | 成人短视频视频在线观看网站 | 欧美亚洲精品一区二三 | 日日日日日日bbbbb视频 | 色综合久久一区二区三区 | 欧美日韩专区 | 欧美激情 在线 | 国产一起色一起爱 | 一级毛片在线 | 色拍拍欧美视频在线看 | 成视频年人黄网站免费视频 | 久久精品一区二区 | 99热久久只有精品6国产32 | 国产亚洲综合精品一区二区三区 | 久久国产成人精品国产成人亚洲 | 香港三级做爰大爽视频 | 亚洲精品不卡久久久久久 |