国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

BoYang / 1248人閱讀

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

Basic Operations on Images

1讀取和修改像素值

可以通過行列坐標(biāo)訪問像素值.對于BGR圖,它返回一個(gè)藍(lán)色、綠色、紅色通道的數(shù)組值.對于灰度圖,僅返回相應(yīng)的強(qiáng)度值.

代碼

import numpy as np
import cv2
img = cv2.imread("img.jpg")
px = img[32,32]#訪問(32,32)坐標(biāo)像素值
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是一個(gè)用于快速陣列計(jì)算的優(yōu)化庫。 因此,簡單地訪問每個(gè)像素值并對其進(jìn)行修改將非常緩慢

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

代碼

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

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

100
2訪問圖像屬性

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

print(img.shape)

(331, 480, 3)

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

img.size訪問像素總數(shù)

print(img.size)

476640

img.dtype訪問圖像數(shù)據(jù)類型

print(img.dtype)

uint8

NOTE
img.dtype在調(diào)試時(shí)非常重要,因?yàn)镺penCV-Python代碼中的大量錯(cuò)誤是由無效的數(shù)據(jù)類型引起的。

3圖像ROI

有時(shí),您必須使用某些圖像區(qū)域。 對于圖像中的眼睛檢測,在整個(gè)圖像上進(jìn)行第一次面部檢測。 當(dāng)獲得面部時(shí),我們多帶帶選擇面部區(qū)域并在其內(nèi)部搜索眼睛而不是搜索整個(gè)圖像。 它提高了準(zhǔn)確性(因?yàn)檠劬偸窃谀樕希篋)和表現(xiàn)(因?yàn)槲覀冊谝粋€(gè)小區(qū)域搜索)。

使用Numpy索引再次獲得ROI。

應(yīng)用

我選擇感興趣區(qū)域并將其復(fù)制到圖像中的另一個(gè)區(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拆分和合并圖像通道

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

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

或者

b = img[:,:,0]

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

img[:,:,2] = 0

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

5繪制圖像邊框

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

src - 輸入圖像

top,bottom,left,right - 相應(yīng)方向上像素?cái)?shù)的邊框?qū)挾?/p>

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 - 最后一個(gè)像素在整個(gè)過程中被復(fù)制,像:aaaaaa |abcdefgh|hhhhhhh這樣
cv.BORDER_WRAP - 對稱方向 像素互換 就像: cdefgh|abcdefgh|abcdefg 這樣

應(yīng)用
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()

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41981.html

相關(guān)文章

發(fā)表評論

0條評論

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