文章目录

  • OpenCV学习笔记 - 图像运算
  • 图像算术运算
  • cv2.add(img1,img2)
  • cv2.subtract(img1,img2)
  • cv2.addWeighted(img1,alpha,img2,beta,gamma)
  • 图像位运算
  • cv2.bitwise_not(img)
  • cv2.bitwise_and(img1,img2)
  • cv2.bitwise_or(img1,img2) cv2.bitwise_xor(img1,img2)
  • 课程大作业 - 图像添加水印
  • 基本步骤
  • 引入一幅图片
  • 要有一个LOGO
  • 计算图片在什么地方添加,在添加的地方变成黑色
  • 利用add,将LOGO与图片叠加在一起
  • 展示效果
  • 实验效果


OpenCV学习笔记 - 图像运算

图像算术运算

cv2.add(img1,img2)

  • 功能:图像相加 (注意:img1,img2的图像的尺寸必须是一致的)
  • 参数说明
  • img1 : 作矩阵相加的图像1(numpy类型)
  • img2 : 作矩阵相加的图像2(numpy类型)
  • 运算规则
  • iOS opencv图像处理 二值化 opencv图像处理算法_iOS opencv图像处理 二值化

  • 代码实例
import cv2
import numpy as np

# 读取图片
img1 = cv2.imread('./img/AI_Security.jpg')

# 图的加法运算就是矩阵的加法运算
# 注意加法运算的两张图尺寸必须是一样的
img2 = np.ones(img1.shape,np.uint8) * 50

# 图像相加的结果
res = cv2.add(img1,img2)

# 展示图片
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('res',res)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()
  • 实验效果:增加img1图像的亮度
  • iOS opencv图像处理 二值化 opencv图像处理算法_opencv_02

cv2.subtract(img1,img2)

  • 功能:图像相减 (注意:img1,img2的图像的尺寸必须是一致的)
  • 参数说明
  • img1 : 作矩阵相减的图像1(numpy类型)
  • img2 : 作矩阵相减的图像2(numpy类型)
  • 运算规则
  • iOS opencv图像处理 二值化 opencv图像处理算法_iOS opencv图像处理 二值化_03

  • 代码实例:继图像相加的代码,将图像复原
# 图像相减
origin = cv2.subtract(res,img2)

# 展示图片
cv2.imshow('origin',origin)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
	cv2.destroyAllWindows()
  • 实验效果
  • iOS opencv图像处理 二值化 opencv图像处理算法_参数说明_04

  • 补充:为了让图像相乘和相除更快可以用 cv2.multiply(img1,img2) cv2.divide(img1,img2)

cv2.addWeighted(img1,alpha,img2,beta,gamma)

  • 功能:实现图像融合
  • 参数说明
  • img1:需要融合的图像1
  • alpha:img1融合所占权重
  • img2:需要融合的图像2
  • beta:img2融合所占权重
  • gamma:静态权重(简单理解为偏置项)
  • 运算规则
  • 代码实例
import cv2
import numpy as np

## 创建窗口
cv2.namedWindow('img1',cv2.WINDOW_NORMAL)
cv2.namedWindow('img2',cv2.WINDOW_NORMAL)
cv2.namedWindow('res',cv2.WINDOW_NORMAL)

## 设置展示窗口的大小
cv2.resizeWindow('img1',480,480)
cv2.resizeWindow('img2',480,480)
cv2.resizeWindow('res',480,480)

## 读取图片
img1 = cv2.imread('./img/AI_Security.jpg')
img2 = cv2.imread('./img/TSU.jpg')

## 由于读入的两张图片尺寸是不一样的,因此我们需要将其尺寸保持一致
print(img1.shape)
img2 = cv2.resize(img2,(img1.shape[1],img1.shape[0]),interpolation=cv2.INTER_CUBIC)
print(img2.shape)


## 图片融合
res = cv2.addWeighted(img1,0.9,img2,0.1,0)

## 展示图片
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('res',res)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()
  • 实验效果

图像位运算

cv2.bitwise_not(img)

  • 功能:将图像进行像素的二进制值按位翻转
  • 参数说明
  • img : 需要图像按位翻转的图像
  • 代码实例
import cv2
import numpy as np

## 初始化一张黑白单通道图片
img = np.ones((200,200),np.uint8)

# 在图像中间挖一块白色的矩形
img[50:150,50:150] = 255
cv2.imshow('img',img)

# 将图片翻转
img2 = cv2.bitwise_not(img)
cv2.imshow('img2',img2)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()
  • 实验效果
  • iOS opencv图像处理 二值化 opencv图像处理算法_计算机视觉_05

cv2.bitwise_and(img1,img2)

  • 代码功能:将图像进行像素的二进制值按位与运算
  • 参数说明
  • img1:需要作按位与运算的图像1
  • img2:需要作按位与运算的图像2
  • 实验效果
  • iOS opencv图像处理 二值化 opencv图像处理算法_学习_06

cv2.bitwise_or(img1,img2) cv2.bitwise_xor(img1,img2)

  • 代码功能:实现图像的按位或/异或运算,或or运算整合图像信息/异或xor运算实现重叠部分标暗
  • 参数说明
  • img1:需要作按位与运算的图像1
  • img2:需要作按位与运算的图像2
  • 代码实例
import cv2
import numpy as np

img1 = np.zeros((200,200),np.uint8)
img1[50:120,50:120] = 255
img2 = np.zeros((200,200),np.uint8)
img2[80:150,80:150] = 255


cv2.imshow('img1',img1)
cv2.imshow('img2',img2)

## 或:整合信息
img_or = cv2.bitwise_or(img1,img2)

## 异或:将重合部分标黑
img_xor = cv2.bitwise_xor(img1,img2)


cv2.imshow('img_or',img_or)
cv2.imshow('img_xor',img_xor)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()
  • 实验效果
  • iOS opencv图像处理 二值化 opencv图像处理算法_学习_07

课程大作业 - 图像添加水印

基本步骤

引入一幅图片

# 导入图片
ai_security = cv2.imread('./img/AI_Security.jpg')

要有一个LOGO

# logo
tsu = cv2.imread('./img/TSU.jpg')

计算图片在什么地方添加,在添加的地方变成黑色

mask = np.full((200,200),255,np.uint8)
m = cv2.bitwise_not(mask)

# 选择AI_security添加logo的位置
roi = ai_security[0:200,0:200]

# 与m进行与操作(挖去需要添加logo的位置)
tmp = cv2.bitwise_and(roi,roi,mask=m)

利用add,将LOGO与图片叠加在一起

# 添加logo
dst = cv2.add(tmp,tsu)
ai_security[0:200,0:200] = dst

展示效果

## 展示图片
cv2.imshow('ai',ai_security)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()

实验效果

iOS opencv图像处理 二值化 opencv图像处理算法_计算机视觉_08