OpenCV 图像处理(二)-图像相关操作

图像相关操作

目录

图像相关操作

图像裁剪与通道截取

边界填充

图像计算

改变图像大小

图像融合 

图像阈值(二值图像)


  • 图像裁剪与通道截取

# 截取部分图像数据
cat=img[0:50,0:200] 

# 颜色通道提取
b,g,r=cv2.split(img)

# 合并颜色通道

img=cv2.merge((b,g,r))
  • 边界填充

# 设定边界
top_size,bottom_size,left_size,right_size = (50,50,50,50)
# BORDER_REPLICATE:复制法,也就是复制最边缘像素。
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
# BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制,例如:fedcba|abcdefgh|hgfedcb
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
# BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
# BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
# BORDER_CONSTANT:常量法,常数值填充。
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

import matplotlib.pyplot as plt
plt.subplot(231), plt.imshow(img, '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()
  • 图像计算

img_cat=cv2.imread('cat.jpg')
img_dog=cv2.imread('dog.jpg')
# 每个像素点+10
img_cat2= img_cat +10 

# 相当于% 256,取余
(img_cat + img_cat2)[:5,:,0]

# 大于255取255
cv2.add(img_cat,img_cat2)[:5,:,0]
  • 改变图像大小

resize()函数

cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)

resize参数
InputArray输入图片fx, fy沿x轴,y轴的缩放系数
OutputArray输出图片interpolation插入方式
Size图片尺寸  

 interpolation,可选参数

INTER_NEAREST

最近邻插值

INTER_LINEAR

双线性插值(默认设置)

INTER_AREA

使用像素区域关系进行重采样。

INTER_CUBIC

4x4像素邻域的双三次插值

INTER_LANCZOS4

8x8像素邻域的Lanczos插值

代码案例
img_cat.shape #(414,500,3)

img_dog = cv2.resize(img_dog, (500, 414))
img_dog.shape
  • 图像融合 

cv2.addWeighted(src1, alpha, src2, beta, gamma)

src1、src2形状相同的两张图像
alpha、beta对应相应图像透明度的比重
gamma常数

代码案例

res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)
  • 图像阈值(二值图像)

ret, dst = cv2.threshold(src, thresh, maxval, type)

图像阈值

src

输入图,只能输入单通道图像,通常来说为灰度图

thresh

阈值

maxval

当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

type二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
maxval(阈值处理参数)

cv2.THRESH_BINARY

超过阈值部分取maxval(最大值),否则取0

cv2.THRESH_BINARY_INV

THRESH_BINARY的反转

cv2.THRESH_TRUNC

大于阈值部分设为阈值,否则不变

cv2.THRESH_TOZERO

大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INVTHRESH_TOZERO的反转
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值