OpenCV python 学习笔记(三)

时间:2021-07-16 06:56:56

不多说,直接上代码:

# -*- coding:utf-8 -*-

# 图像上的算数运算
# 目标:
# 学习图像上的算术运算,加法、减法、位运算
# 主要函数:cv2.add()、cv2.addWeighted()等


import cv2
import 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 time
step_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)       # 不了解

我不是很了解,望解答(自勉) 这次把两张图片也上传