摘要:對于圖像中的眼睛檢測,在整個(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) 1002訪問圖像屬性
圖像的屬性包括行數(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ù)類型引起的。
有時(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索引。
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_101或cv2.BORDER_DEFAULT - 與上面相同,但略有改動,如下所示:gfedcb | abcdefgh | gfedcba
cv.BORDER_REPLICATE - 最后一個(gè)像素在整個(gè)過程中被復(fù)制,像: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()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41981.html
閱讀 6912·2021-09-22 15:08
閱讀 1920·2021-08-24 10:03
閱讀 2437·2021-08-20 09:36
閱讀 1315·2020-12-03 17:22
閱讀 2474·2019-08-30 15:55
閱讀 905·2019-08-29 16:13
閱讀 3053·2019-08-29 12:41
閱讀 3249·2019-08-26 12:12