亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

opencv python 讀取/修改像素值/訪問圖像屬性/ROI/拆分合并圖像通道/繪制圖像邊框

BoYang / 1348人閱讀

摘要:對于圖像中的眼睛檢測,在整個圖像上進行第一次面部檢測。應用我選擇感興趣區(qū)域并將其復制到圖像中的另一個區(qū)域代碼拆分和合并圖像通道有時需要在,,通道圖像上多帶帶工作。在這種情況下,您需要將圖像分割為單個通道。

Basic Operations on Images

1讀取和修改像素值

可以通過行列坐標訪問像素值.對于BGR圖,它返回一個藍色、綠色、紅色通道的數組值.對于灰度圖,僅返回相應的強度值.

代碼

import numpy as np
import cv2
img = cv2.imread("img.jpg")
px = img[32,32]#訪問(32,32)坐標像素值
print(px)


[ 33 108  57]
print(img[32,32,0]) #訪問B通道像素值

33
print(img[32,32,1]) #訪問G通道像素值

108
img[32,32]=[108,108,108]#修改像素值
print(img[32,32])

[108 108 108]

Note

Numpy是一個用于快速陣列計算的優(yōu)化庫。 因此,簡單地訪問每個像素值并對其進行修改將非常緩慢

上述方法通常用于選擇數組的一個區(qū)域,比如前五行和三列.對于訪問單個像素點,推薦使用array.item()array.itemset(),它們返回的是一個標量.如果需要訪問所有B,G,R值,需要對它們多帶帶調用array.item()

代碼

img.item(32,32,2)#訪問R值

108
img.itemset((32,32,2),100)#修改R值
img.item(32,32,2)

100
2訪問圖像屬性

圖像的屬性包括行數,列數,通道數,圖像數據類型,像素數等.
img.shape訪問圖像的形狀,返回一組行,列,通道的元組(彩色圖像)

print(img.shape)

(331, 480, 3)

NOTE:
注意如果圖像是灰度圖像,則返回的元組僅包含行數和列數,因此它是一種檢查圖像是灰度圖像還是彩色圖像的好方法.

img.size訪問像素總數

print(img.size)

476640

img.dtype訪問圖像數據類型

print(img.dtype)

uint8

NOTE
img.dtype在調試時非常重要,因為OpenCV-Python代碼中的大量錯誤是由無效的數據類型引起的。

3圖像ROI

有時,您必須使用某些圖像區(qū)域。 對于圖像中的眼睛檢測,在整個圖像上進行第一次面部檢測。 當獲得面部時,我們多帶帶選擇面部區(qū)域并在其內部搜索眼睛而不是搜索整個圖像。 它提高了準確性(因為眼睛總是在臉上:D)和表現(因為我們在一個小區(qū)域搜索)。

使用Numpy索引再次獲得ROI。

應用

我選擇感興趣區(qū)域并將其復制到圖像中的另一個區(qū)域:
代碼

import cv2
img = cv2.imread("img.jpg")

husky = img[1:240,60:270]
img[61:300,270:480] = husky

cv2.imshow("show",img)
cv2.waitKey()

4拆分和合并圖像通道

有時需要在B,G,R通道圖像上多帶帶工作。 在這種情況下,您需要將BGR圖像分割為單個通道。

b,g,r = cv2.split(img) #拆分圖像通道
img = cv2.merge((b,g,r))

或者

b = img[:,:,0]

假設您要將所有R像素設置為零,則無需先拆分通道。 Numpy索引更快:

img[:,:,2] = 0

NOTE:
cv2.split()是一項代價高的操作(就時間而言)。 所以只有在你需要時才這樣做。 否則去Numpy索引。

5繪制圖像邊框

cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])

src - 輸入圖像

top,bottom,left,right - 相應方向上像素數的邊框寬度

value : cv2.BORDER_CONSTANT,cv2.BORDER_REFLECT,cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT ,cv2.BORDER_REPLICATE,cv2.BORDER_WRAP

cv2.BORDER_CONSTANT 添加常量彩色邊框
cv2.BORDER_REFLECT Border將是邊框元素的鏡像反射

cv2.BORDER_REFLECT_101cv2.BORDER_DEFAULT - 與上面相同,但略有改動,如下所示:gfedcb | abcdefgh | gfedcba
cv.BORDER_REPLICATE - 最后一個像素在整個過程中被復制,像:aaaaaa |abcdefgh|hhhhhhh這樣
cv.BORDER_WRAP - 對稱方向 像素互換 就像: cdefgh|abcdefgh|abcdefg 這樣

應用
import cv2
from matplotlib import pyplot as plt

BLUE = [255,0,0]

img1 = cv2.imread("img1.jpg")

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()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/41981.html

相關文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<