使用二进制掩码裁剪OpenCV图像出现New_image未定义错误如何解决
代码错误说明
- 核心错误:
New_image是crop函数内部的局部变量,仅在函数内部作用域有效,你没有调用crop函数,也没有在全局作用域定义该变量,因此触发未定义报错。 - 隐藏错误:
matplotlib导入写法错误,要使用imshow方法需要导入pyplot子模块,原写法后续调用plt.imshow也会报错。
修正后的完整代码
import cv2 import numpy as np import matplotlib.pyplot as plt # 修正导入错误 img = cv2.imread("image.png") mask = cv2.imread("mask.png") h, w, _ = img.shape mask = cv2.resize(cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY), (w, h)) bg = np.zeros_like(img, 'uint8') def crop(img, bg, mask): fg = cv2.bitwise_or(img, img, mask=mask) fg_back_inv = cv2.bitwise_or(bg, bg, mask=cv2.bitwise_not(mask)) New_image = cv2.bitwise_or(fg, fg_back_inv) return New_image # 调用crop函数,将返回值赋值给全局变量New_image New_image = crop(img, bg, mask) plt.imshow(cv2.cvtColor(New_image, cv2.COLOR_BGR2RGB)) plt.show() # 新增该行以显示图像窗口
内容的提问来源于stack exchange,提问作者DevanDev
相关产品推荐
相关产品推荐

