cv2.bitwise_and和cv2.add()的区别
时间: 2023-11-09 21:34:30 浏览: 62
cv2.bitwise_and()函数是按位AND操作,它将两个输入图像中的像素逐位进行AND操作,返回一个新的图像作为输出。它通常用于图像蒙版、图像分割和图像处理等领域。
cv2.add()函数是图像相加操作,它将两个输入图像中的像素逐位相加,返回一个新的图像作为输出。它通常用于图像增强、亮度调整和对比度增强等领域。
因此,cv2.bitwise_and()和cv2.add()的区别在于它们执行的操作不同,一个是按位AND操作,一个是图像相加操作。
相关问题
2.读取两幅图像,使用cv2.add()函数实现图像间的加运算。(建议让图像的加运算操作有意义,例如给图像加个logo,或者是给图像加个水印);
在Python OpenCV中,`cv2.add()` 函数用于两个相同大小的单通道或多通道图像之间的元素逐像素相加。如果你想在图像间实现有意义的加法操作,比如添加一个Logo或者水印,可以按照以下步骤进行:
1. **加载图像**:首先,分别加载需要叠加的主图像(main image)和要添加的图像(overlay, 例如Logo或水印)使用 `cv2.imread()` 函数。确保这两个图像的尺寸一致,或者如果你想要在主图像的一部分上放置水印,那么水印图像的尺寸应该小于等于主图像的尺寸。
```python
main_image = cv2.imread('main_image.jpg')
watermark = cv2.imread('watermark.png')
```
2. **调整透明度**:如果水印不是完全透明,可能需要调整其透明度,通常使用 alpha blending (Alpha Blending)。可以使用 `cv2.addWeighted()` 或者 `cv2.bitwise_and()` 来实现,根据需要设置权重(通常0.5到1之间)。
```python
if watermark.shape[2] == 4: # 检查是否有alpha通道
overlay_alpha = watermark[:, :, -1]
overlay = watermark[:, :, :3] / 255 * overlay_alpha + main_image * (1 - overlay_alpha)
else:
overlay = watermark
```
3. **图像叠加**:最后,使用 `cv2.add()` 将主图像和调整后的水印合并在一起。
```python
result = cv2.add(main_image, overlay)
```
4. **保存结果**:完成图像叠加后,可以使用 `cv2.imwrite()` 函数保存结果。
```python
cv2.imwrite('result_with_logo.jpg', result)
```
import numpy as np from matplotlib import pyplot as plt import cv2 as cv def contours_area(cnt): # 计算 countour 的面积 (x, y, w, h) = cv.boundingRect(cnt) return w * h # 载入原图 img = cv.imread('cat.png') # 图像二值化 img_bin = cv.inRange(img, lowerb=(9, 16, 84), upperb=(255, 251, 255)) kernel = np.ones((5, 5), np.uint8) img_bin = cv.erode(img_bin, kernel, iterations=1) img_bin = cv.dilate(img_bin, kernel, iterations=2) contours, hierarchy = cv.findContours(img_bin,cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) img_contours=cv.drawContours(img_bin, contours, -1, (0, 0, 255), 2) #抠图-带罩层的二值化与操作 #img跟它本身进行或/与操作(其实他们的结果是一样的) 在罩层区域(MASK)内进行。罩层区域为0, 黑色。 #二值化操作就是 如果两个img的该点的像素点都不为零则保留原来的取值,否则就是黑色。 mask = img.copy() mask[:] = 0 cv.drawContours(mask, contours, -1, (255,255,255), -1) img_cutout = cv.bitwise_or(img,mask) background=np.zeros_like(img) background[:,:,:]=(150,198,12) new_background = cv.bitwise_or(background, background, mask=cv.bitwise_not(mask)) new_img=cv.add(new_background,img_cutout) cv.imshow('binary',new_img) cv.waitKey(0) cv.destroyAllWindows找错误
这是一个Python函数的开头,用于导入需要使用的库。其中numpy库被导入并重命名为np,用于进行数学计算和数组操作;matplotlib库中的pyplot子库被导入并重命名为plt,用于绘制图形;cv2库被导入并重命名为cv,用于图像处理。
函数名称为contours_area,它的参数是一个轮廓,用于计算该轮廓的面积。