2021-09-09
Posted qq_53299212
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-09-09相关的知识,希望对你有一定的参考价值。
Day2 图像算数(加法)
add
1.image = img1 + img2 :两张图片直接相加
import cv2
import numpy as np
img1 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\1.jpeg')
img2 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\1.jpeg')
image = img1 + img2
cv2.namedWindow('image', 0)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 通过add()函数进行相加,与直接相加的区别在于,当两个点的像素值相加大于255时,add会将得到的值限制在255
import cv2
import numpy as np
img1 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\1.jpeg')
img2 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\1.jpeg')
image = cv2.add(img1, img2)
cv2.namedWindow('image', 0)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. addWeighted(src1, weight1, src2, weight2, add, image)
可以根据不同的权重进行图片的相加,add为做和后添加的数值,太大会导致到达255,图片为全白;image为图片输出;
import cv2
img1 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\1.jpeg')
img2 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\1.jpeg')
image = cv2.addWeighted(img1, 0.3, img2, 0.7, 1)
cv2.namedWindow('image')
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在对函数的解析文章中,很多以c++为工具的文章都以最后一个参数为输出,也就是不需要再image = addWeighted了,但实际在python环境中,似乎并不能这样做。
叠加
- 掩膜(mask)
掩膜是图像处理中一个常见的概念,脱胎于半导体工艺。
我将其理解为一种保护,保护掩膜区域内的数据,具体例子如下:
可以看到在掩膜为1的地方原始图的数据保留了下来。
具体实现措施为二者进行逻辑与,与mask中的0相与的数据全部归零,与1相与的数据则保留了下来。 - mask的制作:
我们以在图片中插入python标志为例
img1gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
将插入图片灰度化
ret, mask = cv2.threshold(img1gray, 220, 255, cv2.THRESH_BINARY_INV)
再进行二值化
cv2.threshold()函数的参数分别为:图片源,阈值,二值化的最大值,二值化的方式
具体参数:
可得:
因为我们是想要插入中间的python标志图像,所以我们可以现在原图中扣出一个空框出来,具体操作如下:
rows, cols, channels = img1.shape
roi = img2[0:rows, 0:cols]
img1gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img1gray, 220, 255, cv2.THRESH_BINARY_INV)
mask_inv = cv2.bitwise_not(mask)
roi = cv2.bitwise_and(roi, roi, mask=mask_inv)
这里我们用的是mask的逆图像,因为只有当图像为黑的部分,及灰度值为0,在与其他图像求与是会恒为0,达到了扣图的目的
3. 制作:
现在开始制作有效图像,现在我们需要得到有python标志的上图,因为上图中只有应有py标志的区域灰度值为0,所以我们需要有原彩的标志和为纯黑的背景图像,将两者相加即可得到。而掩膜的作用就是将需要的部分之外的全变成0,这也是我们制作两个掩膜的原因,一个保留图案,一个保留背景。全部代码如下:
import cv2
img1 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\3.jpg')
img2 = cv2.imread('C:\\\\Users\\\\1\\\\PycharmProjects\\\\text\\\\1.jpeg')
rows, cols, channels = img1.shape
roi = img2[0:rows, 0:cols]
img1gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img1gray, 220, 255, cv2.THRESH_BINARY_INV)
mask_inv = cv2.bitwise_not(mask)
roi1 = cv2.bitwise_and(roi, roi, mask=mask_inv)
roi2 = cv2.bitwise_and(img1, img1, mask=mask)
roi = cv2.add(roi1, roi2)
img2[0:rows, 0:cols] = roi
cv2.namedWindow('image',cv2.WINDOW_NORMAL )
cv2.imshow('image', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
最后将原图那部分区域进行替换即可
以上是关于2021-09-09的主要内容,如果未能解决你的问题,请参考以下文章
2021-09-09 WPF上位机 05-常用框架页面布局案例