如何将图片内橙色线框起来的区域内部颜色不变,框外背景颜色变为黑色?希望用Python实现。
该回答引用ChatGPT
要实现这个功能,需要用到Python中的图像处理库OpenCV。以下是实现该功能的基本步骤:
1、读取图片,将其转换为灰度图像。
2、对灰度图像进行阈值处理,将橙色线框起来的区域变为白色,其他区域变为黑色。
3、对阈值处理后的图像进行膨胀操作,以填补橙色线周围的空隙。
4、对膨胀后的图像进行轮廓检测,找到橙色线的轮廓。
5、根据轮廓信息,创建一个与原图像大小相同的全黑图像。
6、在全黑图像上,用白色填充橙色线框起来的区域。
7、将原图像和填充后的全黑图像进行按位与操作,得到最终的结果。
下面是实现该功能的示例代码:
import cv2
import numpy as np
# 读取图片并转换为灰度图像
img = cv2.imread('img.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对灰度图像进行阈值处理,将橙色线框起来的区域变为白色,其他区域变为黑色
thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)[1]
# 对阈值处理后的图像进行膨胀操作
kernel = np.ones((5,5), np.uint8)
dilation = cv2.dilate(thresh, kernel, iterations=2)
# 对膨胀后的图像进行轮廓检测,找到橙色线的轮廓
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 创建一个与原图像大小相同的全黑图像
mask = np.zeros_like(img)
# 在全黑图像上,用白色填充橙色线框起来的区域
cv2.drawContours(mask, contours, -1, (255,255,255), thickness=-1)
# 将原图像和填充后的全黑图像进行按位与操作,得到最终的结果
result = cv2.bitwise_and(img, mask)
# 将框外背景颜色变为黑色
result[np.where((result == [0,0,0]).all(axis=2))] = [0,0,0]
# 显示最终结果
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
轮廓填充
不知道你这个问题是否已经解决, 如果还没有解决的话: