OpenCV——实验结果输出《图像基本操作》

1.图像融合

图像融合主要使用的函数为
cv2.addWeighted()

#============================图像融合============================
# img_cat + img_dog  #shapes (414,500,3) (429,499,3)
img_dog = cv2.resize(img_dog,(500,414))#resize函数,不考虑图像形变问题。
print(img_dog.shape)
#两张图片的权重相同,gamma修正系数,0为亮度值
res = cv2.addWeighted(img_cat,0.5,img_dog,0.5,0)#主要功能就是将两幅图像合成为一幅图像
plt.imshow(res)
plt.show()

res = cv2.resize(img,(0,0),fx=4,fy=4)#x轴y轴的倍数
plt.imshow(img)
plt.show()

请添加图片描述

2.边界填充

#============================边界填充============================
top_size,bottom_size,left_size,right_size = (50,50,50,50)
#总共有5种填充方法,填充函数使用的是copyMakeBorder,方法可以选择cv2.,img是图片,然后设置填充大小
'''
BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充。
'''
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)
fig,ax = plt.subplots(2,3,figsize=(20,6))
pic = [img,replicate,reflect,reflect101,wrap,constant]
ax[0][0].imshow(pic[0])

ax[0][1].imshow(pic[1])

ax[0][2].imshow(pic[2])

ax[1][0].imshow(pic[3])

ax[1][1].imshow(pic[4])

ax[1][2].imshow(pic[5])
plt.show()

请添加图片描述

3.图像阈值

retval, dst = cv2.threshold(src, thresh, maxval, type[, dst])

参数解释:

  1. src:输入图像,可以是灰度图像或彩色图像。

  2. thresh:阈值,用于将像素值与之进行比较。

  3. maxval:用于设置像素的最大值。

  4. type:阈值化类型,控制像素分类的方式。常用的类型包括:

    4.1. cv2.THRESH_BINARY:二值化阈值化类型,大于阈值的像素值设 置为 maxval,小于等于阈值的像素值设置为0。

    4.2. cv2.THRESH_BINARY_INV:反二值化阈值化类型,大于阈值的像素值设置为0,小于等于阈值的像素值设置为 maxval。

    4.3. cv2.THRESH_TRUNC:截断阈值化类型,大于阈值的像素值设置为阈值,小于等于阈值的像素值保持不变。

    扫描二维码关注公众号,回复: 15917346 查看本文章

    4.4. cv2.THRESH_TOZERO:零阈值化类型,大于阈值的像素值保持不变,小于等于阈值的像素值设置为0。

    4.5. cv2.THRESH_TOZERO_INV:反零阈值化类型,大于阈值的像素值设置为0,小于等于阈值的像素值保持不变。

dst(可选):输出图像,与输入图像大小和类型相同。
函数返回值:

retval:选择的阈值,根据所选择的阈值化类型进行计算。

dst:输出的二值图像。

cv2.threshold函数可以用于图像分割、边缘检测、特征提取等各种图像处理任务中,根据不同的阈值化类型和参数选择,可以实现不同的效果。

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()

请添加图片描述

参考链接
https://blog.csdn.net/jinmie0193/article/details/79969385
https://blog.csdn.net/ShaoDu/article/details/96429733?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-96429733-blog-121455266.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-96429733-blog-121455266.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=2

猜你喜欢

转载自blog.csdn.net/guoguozgw/article/details/131326285