不多说,直接上代码:
# -*- coding:utf-8 -*-# 图像上的算数运算# 目标:# 学习图像上的算术运算,加法、减法、位运算# 主要函数:cv2.add()、cv2.addWeighted()等import cv2import numpy as np# 图像上的加法# 大致有两种:# cv2.add():这是一个饱和操作# +:这是Numpy中的运算,之一种模操作,res = img1 + img2# 注意两幅图片的大小类型必须一致,或者第二个图象是一个标量# 由于两者的差别,我们一般多用cv2.add(src1, src2)## x = np.uint8([250])# y = np.uint8([10])## PRint x+y# print cv2.add(x,y)# # [4] 解释:(250+10)%255 这是模运算# # [[255]] 解释:(250+10)>255?255:(250+10) 这是饱和运算# 图像的混合# 原理:也是加法,只是权重不同,给人一种混合的或者透明的感觉# 公式:g(x) = (1-a)*f0(x) + a*f1(x) a→(0,1)不同的a值可以实现不同的效果# dist = a*img1+(1-a)*img2+y cv2.addWeighted(img1, a, img2, (1-a), y)# img1 = cv2.imread("01.jpg")# img2 = cv2.imread("02.jpg")## if img1.size == img2.size and img1.dtype == img2.dtype:# res = cv2.addWeighted(img1, 0.5, img2, 0.5, 5)# cv2.namedWindow("show", cv2.WINDOW_NORMAL)# cv2.imshow("show", res)# if cv2.waitKey(0) == 27:# cv2.destroyAllWindows()# # 效果很赞# 按位运算# 问题:如何将一个图放到另一个图上去,加法会改变颜色,混加会透明# 解决:按位运算# img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)# img1 = cv2.imread("01.jpg")# img2 = img[120:320, 300:450]## rows, cols, channels = img2.shape# roi = img1[0:rows, 0:cols]## gray_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) # 将图片灰度化# ret, mask = cv2.threshold(gray_img2, 175, 255, cv2.THRESH_BINARY) # 不了解# mask_inv = cv2.bitwise_not(mask) # 按位运算# img1_bg = cv2.bitwise_and(roi, roi, mask = mask) # 同上# img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv) # 同上## dst = cv2.add(img1_bg,img2_fg)# img1[0:rows, 0:cols] = dst## cv2.imshow("show", img2_fg)# cv2.waitKey(0)# cv2.destroyAllWindows()# 练习:创建一个幻灯片,来演示如何将一幅图平滑转换到另一幅图,使用函数cv2.addWeighted()import timestep_list = [0.02 * x for x in range(0, 51)]img1 = cv2.imread("01.jpg")img2 = cv2.imread("02.jpg")cv2.imshow("show", img1)for i in step_list: res = cv2.addWeighted(img1, i, img2, (1-i), 0) cv2.imshow("show", res) cv2.waitKey(60)if cv2.waitKey(0) ==27: # 按'Esc'退出 cv2.destroyAllWindows()# ret, mask = cv2.threshold(gray_img2, 175, 255, cv2.THRESH_BINARY) # 不了解我不是很了解,望解答(自勉)这次把两张图片也上传
新闻热点
疑难解答