dst = cv2.bitwise_and(frame,fgmask ,mask = mask1) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:214: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and type), nor 'array op scalar', nor 'scalar op array' in function 'cv::binary_op'
时间: 2023-11-23 07:50:23 浏览: 27
这个错误通常发生在 cv2.bitwise_and() 函数中,它要求两个输入的数组(frame 和 fgmask)具有相同的大小和类型。根据报错信息,这里的问题可能是 mask1 的大小与 frame 和 fgmask 不匹配。
要解决这个问题,你可以检查 mask1 的大小,并确保它与 frame 和 fgmask 具有相同的大小。如果 mask1 的大小不匹配,你可以尝试调整它的大小或使用其他方法来处理这个问题,比如使用 cv2.resize() 函数调整大小。
另外,你也可以检查一下 frame 和 fgmask 的大小和类型是否相同,确保它们满足 cv2.bitwise_and() 函数的要求。
希望这可以帮助到你解决问题!如果还有其他问题,请随时提问。
相关问题
import cv2 img1 = cv2.imread("F:/tuxiangchuli/shiyan/shiyan1/big.jpg") img2 = cv2.imread("F:/tuxiangchuli/shiyan/shiyan1/smalls.jpg") rows1,cols1,channels1 = img1.shape rows,cols,channels = img2.shape roi = img1[0:rows, (cols1-cols):cols1] img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) ret, mask = cv2.threshold(img2gray, 240, 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, (cols1-cols):cols1] = dst cv2.imshow("Result", img1) cv2.waitKey(0) cv2.destroyAllWindows() 将以上代码改为将图标放置在左上角
要将图标放置在左上角,只需将 `(cols1-cols):cols1` 的起始和结束位置调整为 `(0:cols)`,使其只覆盖左上角的区域。以下是修改后的代码:
```python
import cv2
img1 = cv2.imread("F:/tuxiangchuli/shiyan/shiyan1/big.jpg")
img2 = cv2.imread("F:/tuxiangchuli/shiyan/shiyan1/smalls.jpg")
rows1, cols1, channels1 = img1.shape
rows, cols, channels = img2.shape
roi = img1[0:rows, 0:cols] # 调整roi的起始和结束位置
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 240, 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("Result", img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这样修改后的代码将会将图标放置在左上角,希望对您有帮助!
#调整大小 emoji = cv2.resize(emoji, (60, 60)) roi = frame[0:60, 0:60] # 创建emoji图标的掩码,同时创建其相反掩码 emogray = cv2.cvtColor(emoji, cv2.COLOR_BGR2GRAY) ret, mask = cv2.threshold(emogray, 10, 255, cv2.THRESH_BINARY) mask_inv = cv2.bitwise_not(mask) # 现在将ROI中图标的区域涂黑 frame_bg = cv2.bitwise_and(roi, roi, mask=mask_inv) # 仅从表情图像中提取图标区域 emo_fg = cv2.bitwise_and(emoji, emoji, mask=mask) # 将图标放入ROI并修改主图像 dst = cv2.add(frame_bg, emo_fg) frame[0:60, 0:60] = dst
这段代码实现了在图像中插入一个调整大小表情图标。具体步骤如下:
1. 使用 OpenCV 的 `resize()` 函数将表情图标 `emoji` 调整为大小为 (60, 60) 的图像。
2. 在原始图像 `frame` 中选择一个大小为 (60, 60) 的感兴趣区域(ROI)。
3. 使用 `cv2.cvtColor()` 将调整大小后的表情图标从 BGR 颜色空间转换为灰度图像。
4. 使用 `cv2.threshold()` 函数根据灰度图像创建掩码,将阈值以下的像素设置为 0,以上的像素设置为 255。
5. 使用 `cv2.bitwise_not()` 函数创建掩码的相反掩码。
6. 使用 `cv2.bitwise_and()` 函数将 ROI 区域中的图像与相反掩码进行与操作,将表情图标区域涂黑。
7. 使用 `cv2.bitwise_and()` 函数将表情图标与掩码进行与操作,提取出表情图标中的图标区域。
8. 使用 `cv2.add()` 函数将涂黑的 ROI 区域和提取出的表情图标区域进行加法合成。
9. 将合成后的图像放回原始图像的 ROI 区域中。
通过这些步骤,代码实现了将调整大小后的表情图标插入到原始图像中的指定位置,从而实现图像合成的效果。