机器视觉与深度学习(OpenCV-Python)案例代码2.2:加法运算与可视化水印
案例内容
编写程序,通过"+",add,加权和三种方法,探究可视化数字水印的嵌入过程
原始图像
水印图像
案例原理
对于8位位图,在OpenCV中,使用"+"完成两个数的加法运算时,运算结果会取模处理,运算结果会除255取余。
比如 a处像素值为240,b处像素值为50,a + b的结果为(a + b) % 255 = 290 % 255 = 35
在使用cv2.add(a, b)完成加法运算时,得到的对象会采用饱和处理,大于255的运算结果会被处理为255。
比如 a处像素值为240,b处像素值为50,a + b的结果为min(255, a + b) = min(255, 290) = 255
在使用加权和处理数值时,会将两数值先乘以各自的权重值,进行相加后,再加上调节值,达成最终结果。
比如 a处像素值为120,权重值为0.3,b处像素值为50,权重值为0.6,调节值为10,则加权和的结果为120 × 0.3 + 50 × 0.6 + 10 = 76
重要代码
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)
输出图像dst表示,将两幅图像src1与src2在乘以对应的系数alpha,beta后,在加上亮度调节值gamma后的结果。
代码实现
在代码最开始,需要导入cv2库与numpy库,随后读取原始图像,获取原始图像的相关信息。即:
import cv2
lena=cv2.imread("lena.bmp",0)
Watermark=cv2.imread("watermark.bmp",0)
分别使用"+"、add、加权和对原始图像与水印图像进行加法运算,即:
add1=lena+Watermark #加法运算符“+”运算
add2=cv2.add(lena,Watermark) #add加法运算
add3=cv2.addWeighted(lena,0.6,Watermark,0.3,55) #加权和cv2.addWeighted
展示结果:
cv2.imshow("lena",lena)
cv2.imshow("watermark",Watermark)
cv2.imshow("add1",add1)
cv2.imshow("add2",add2)
cv2.imshow("add3",add3)
cv2.waitKey()
cv2.destroyAllWindows()
最终代码:
#===导入库,获取原始图像与水印图像===
import cv2
lena = cv2.imread("image\lena.bmp", 0)
Watermark = cv2.imread("watermark.bmp", 0)
#===进行加法运算===
add1 = lena + Watermark #加法运算符“+”运算
add2 = cv2.add(lena, Watermark) #add加法运算
add3 = cv2.addWeighted(lena, 0.6, Watermark, 0.2, 40) #加权和cv2.addWeighted
#===显示结果===
cv2.imshow("lena", lena)
cv2.imshow("watermark", Watermark)
cv2.imshow("add1", add1)
cv2.imshow("add2", add2)
cv2.imshow("add3", add3)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)