日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并

發(fā)布時(shí)間:2023/11/28 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 圖像 ROI

有時(shí)你需要對(duì)一幅圖像的特定區(qū)域進(jìn)行操作。例如我們要檢測(cè)一副圖像中眼睛的位置,我們首先應(yīng)該在圖像中找到臉,再在臉的區(qū)域中找眼睛,而不是直接在一幅圖像中搜索。這樣會(huì)提高程序的準(zhǔn)確性和性能。

圖像的 ROI (region of interest) 是指圖像中感興趣區(qū)域、在 OpenCV 中圖像設(shè)置圖像 ROI 區(qū)域,實(shí)現(xiàn)只對(duì) ROI 區(qū)域操作。例如,下面這個(gè)例子,我們把原始圖片中下面的花拷貝到第二幅圖片中。

import cv2image_name = "img/003.jpg"
img = cv2.imread(image_name)
cv2.imshow("origin", img)target = img[70:150, 30:110]	# 70:150 表示 h 的范圍, 30:110 表示 w 的范圍
img[90:170, 110:190] = targetcv2.imshow("dst", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 拆分及合并圖像通道

OpenCV 中默認(rèn) imread 函數(shù)加載圖像文件,加載進(jìn)來(lái)的是三通道彩色圖像,色彩空間是 RGB 色彩空間、通道順序是 BGR(藍(lán)色、綠色、紅色)。有時(shí)我們需要對(duì) BGR 三個(gè)通道分別進(jìn)行操作。這時(shí)你就需要把 BGR 拆分成單個(gè)通道。有時(shí)你需要把獨(dú)立通道的圖片合并成一個(gè) BGR 圖像。使用到的 API 函數(shù)如下:

  • split 通道分類(lèi)
  • merge 通道合并
import cv2
import numpy as npimage_name = "img/003.jpg"
img = cv2.imread(image_name)
print "img is {}".format(img)
cv2.imshow("origin", img)mv = cv2.split(img)
# print "mv is {}".format(mv)
mv[0][:, :] = 255
dst1 = cv2.merge(mv)
cv2.imshow("dst1", dst1)mv = cv2.split(img)
mv[1][:, :] = 0
dst2 = cv2.merge(mv)
cv2.imshow("dst2", dst2)mv = cv2.split(img)
mv[2][:, :] = 0
dst3 = cv2.merge(mv)
cv2.imshow("dst3", dst3)dst4 = np.zeros(img.shape, img.dtype)
cv2.mixChannels(img, dst4, [2, 0])
cv2.imshow("dst4", dst4)
cv2.waitKey(0)
cv2.destroyAllWindows()

mv 的打印結(jié)果如下:

mv is
[
array([[131, 107,  82, ...,  67,  67,  66],[130, 109,  88, ...,  66,  66,  65],[118, 104,  90, ...,  67,  66,  65],...,[  6,   8,   9, ...,  44,  45,  46],[  4,   7,  10, ...,  41,  42,  44],[  0,   5,   8, ...,  39,  40,  41]], dtype=uint8), array([[190, 167, 140, ..., 125, 125, 124],[187, 167, 144, ..., 124, 124, 123],[170, 156, 141, ..., 125, 124, 123],...,[ 73,  75,  73, ...,  58,  59,  60],[ 68,  71,  71, ...,  55,  56,  58],[ 63,  69,  69, ...,  53,  54,  55]], dtype=uint8),array([[199, 173, 145, ...,  97,  97,  96],[196, 173, 149, ...,  96,  96,  95],[177, 162, 144, ..., 100,  99,  98],...,[ 36,  38,  38, ...,  30,  31,  32],[ 38,  41,  43, ...,  27,  28,  30],[ 34,  40,  43, ...,  25,  26,  27]], dtype=uint8)
]
'''

警告:cv2.split() 是一個(gè)比較耗時(shí)的操作。只有真正需要時(shí)才用它,能用 Numpy 索引就盡量用。

總結(jié)

以上是生活随笔為你收集整理的Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。