我得到以下图像作为输入。
我想从图像上去除背景和黑色电缆,而只保留红色电缆。
还要在由于黑色电缆而被隐藏的地方构造红色电缆。
注意:仅允许使用图像处理技术。不允许使用ML或DL。
在这种情况下,我要提取的是红色电线,但也可以是其他颜色,因此我想对其进行概括。
我猜可以通过膨胀和腐 eclipse 来完成构造。
但请帮助我如何提取此内容?
最佳答案
为了改善结果,您必须使用形态学运算,如果电缆的颜色不同,则还必须使用代码进行播放。没有通用解决方案,除了我可以说深度学习或机器学习可能会更好结果。
cv.inRange()
,我更改了部分代码以在HSV空间中实现阈值化。 #========================
# Import Libraies
#========================
import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
#------------------------
# Read Image
#========================
img = cv.imread("img.jpg")
imgHSV = cv.cvtColor(img, cv.COLOR_BGR2HSV)
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
#------------------------
# Threshold Image
#========================
## mask of red
mask1 = cv.inRange(imgHSV, (0, 30, 0), (10, 255,255))
mask2 = cv.inRange(imgHSV, (170, 30, 0), (180, 255,255))
mask = cv.bitwise_or(mask1, mask2)
mask = np.tile(mask, (3,1,1))
mask = np.swapaxes(mask , 0, 1)
mask = np.swapaxes(mask , 1, 2)
print(mask.shape)
th1 = cv.bitwise_and(img,mask)
#------------------------
# Morphology
#========================
kernel1 = np.ones((7,7),np.uint8)
kernel2 = np.zeros((70,70),np.uint8)
kernel2[10:60, 10:60] = 1
img_opn = cv.morphologyEx(th1 ,cv.MORPH_OPEN ,kernel1)
img_cls = cv.morphologyEx(img_opn, cv.MORPH_CLOSE, kernel2)
#------------------------
# Results Visualization
#========================
plt.figure(num = "Red Cable")
plt.subplot(221)
plt.imshow(img)
plt.title('Original')
plt.axis('off')
plt.subplot(222)
plt.imshow(th1)
plt.title('Thresholded')
plt.axis('off')
plt.subplot(223)
plt.imshow(img_opn)
plt.title('Opening')
plt.axis('off')
plt.subplot(224)
plt.imshow(img_cls)
plt.title('Result')
plt.axis('off')
plt.show()
#------------------------
#------------------------
关于python - 对象提取与构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64145295/