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

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條評論
主站蜘蛛池模板: 婷婷精品| 久久久国产精品四虎 | 久久色伊人 | 国产高清美女一级a毛片久久w | 97国产精品国产品国语字幕 | a视频在线播放 | 久久亚洲国产午夜精品理论片 | 久久这里只有精品18 | 91九色精品国产免费 | 九九久久精品这里久久网 | 老子午夜伦影理论片 | 国产精品成人亚洲 | 91啪国自产在线高清观看 | 色婷婷色婷婷 | 精品一区二区三区免费毛片爱 | aaa国产一级毛片 | 亚洲韩国日本一级二级r级 亚洲韩精品欧美一区二区三区 | 久久精品男人的天堂 | 国产亚洲精品精品国产亚洲综合 | 欧美一级刺激毛片 | 国产成人亚洲综合91精品555 | 久久久久久久尹人综合网亚洲 | 亚洲九九精品 | 亚洲精品99久久久久中文字幕 | 国产亚洲精彩视频 | 日韩欧美国产一区二区三区 | 久久在线免费视频 | 99热久久国产精品这 | 亚洲欧美一级久久精品 | 国产精品乱码一区二区三区 | 天天干天天骑 | 4hu永久影院在线四虎 | 免费尤物视频 | 热久久在线 | 九九精品久久久久久噜噜 | 国产成人综合日韩精品无 | 色噜噜狠狠色综合免费视频 | 国产主播第一页 | 免费高清在线影片一区 | 日韩女人做爰大片 | 午夜在线网站 |