【opencv学习】ROI区域和图像填充

一:ROI
ROI就是region of interest,感兴趣的区域,有时候需要去看看某个特定的区域

#!/usr/bin/python
# -*- coding: <encoding name> -*-
import cv2


# 展示图像,封装成函数
def cv_show_image(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)  # 等待时间,单位是毫秒,0代表任意键终止
    cv2.destroyAllWindows()


# 读取彩色图像
img = cv2.imread('images/naruto.jpg')
part = img[0:300, 80:300]
cv_show_image('naruto', part)
part = img[200:500, 280:500]
cv_show_image('naruto', part)

# # 分割图像的三个通道
b, g, r = cv2.split(img)
print(b.shape)
print(g.shape)
print(r.shape)
cv_show_image('gray image, only show B Channel', b)  # 单一通道,就是灰色展示出来了
cv_show_image('gray image, only show G Channel', g)  # 单一通道,就是灰色展示出来了
cv_show_image('gray image, only show R Channel', r)  # 单一通道,就是灰色展示出来了

# 仅仅保留R通道
curr_img = img.copy()
curr_img[:, :, 0] = 0  # 擦掉B通道
curr_img[:, :, 1] = 0  # 擦掉G通道
cv_show_image('colorful image, only keep R Channel data', curr_img)  # 三个通道,显示彩色图像

# 仅仅保留G通道
curr_img = img.copy()
curr_img[:, :, 0] = 0  # 擦掉B通道
curr_img[:, :, 2] = 0  # 擦掉R通道
cv_show_image('colorful image, only keep G Channel data', curr_img)  # 三个通道,显示彩色图像

# 仅仅保留R通道
curr_img = img.copy()
curr_img[:, :, 1] = 0  # 擦掉G通道
curr_img[:, :, 2] = 0  # 擦掉R通道
cv_show_image('colorful image, only keep B Channel data', curr_img)  # 三个通道,显示彩色图像

二:图像填充
有时候需要对图像的边界进行填充

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('images/saoge.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)

# 定义填充的四周的宽度
top_size, bottom_size, left_sze, right_size = (50, 50, 50, 50)

# 进行不同的边界填充
# 边界的像素值,重复填充
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_REPLICATE)
# 映射镜像,比如是 dcba|abcd|dcba
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_REFLECT)
# 映射镜像,比如是 dcb|abcd|cba
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_REFLECT101)
# 外包装法
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_WRAP)
# 常数来填充
content = cv2.copyMakeBorder(img, top_size, bottom_size, left_sze, right_size, borderType=cv2.BORDER_CONSTANT, value=0)

plt.subplot(231), plt.imshow(img, 'gray'), plt.title('original image')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('replicate padding image')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('reflect padding image')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('reflect101 padding image')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('wrap padding image')
plt.subplot(236), plt.imshow(content, 'gray'), plt.title('content padding image')
plt.show()

猜你喜欢

转载自blog.csdn.net/qq_29367075/article/details/122832821