【问题标题】:Getting Rid of Lines in OpenCV-Python摆脱 OpenCV-Python 中的线条
【发布时间】:2018-10-17 22:14:18
【问题描述】:

就像我将原始输入转换为 HSV 颜色空间图像并应用 INRANGE 函数并找到了绿色和蓝色线,现在我想摆脱它们,我希望图像在输出中看起来像......如何我现在应该摆脱线条并用背景颜色替换它们吗??

代码片段:

import cv2 as cv
import numpy as np
img= cv.imread('C:\input.png',1)

hsv=cv.cvtColor(img,cv.COLOR_BGR2HSV)
lower_green = np.array([30,70,20])
upper_green = np.array([70,255,255])
lower_blue = np.array([95, 110, 20])
upper_blue = np.array([135, 255, 255])
mask = cv.inRange(hsv, lower_green , upper_blue)
res = cv.bitwise_and(img,img, mask= mask)
cv.imwrite("out2.jpg", res)

【问题讨论】:

  • 作为How to detect colored patches in an image using OpenCV,我在S(hsv) 上执行cv2.threshold 来检测颜色。然后cv.inpaintrecover。这是我的结果i.stack.imgur.com/mung9.jpg。需要更好的恢复方法。
  • @Silencer....你能用我的代码指导我更多吗,因为我的 hsv 输出不是你的,所以你能告诉我颜色范围吗??? && 我该如何设置更好的恢复选项??
  • 我认为最好使用inpaint 来达到这个目的。只需使用您已有的蒙版作为 inpaintMask(也许扩张它会产生更好的效果)。
  • @silencer 你是如何让 canvas 和 canvas2 如此精确和正确的......

标签: python-3.x opencv image-processing computer-vision opencv3.1


【解决方案1】:

这是一个快速而肮脏的解决方案。

  1. 从包含线条的手动阈值图像创建蒙版(蒙版 1)

  1. 还创建此蒙版的二进制反转图像(蒙版 2)

  1. 用面具 1 掩盖衬衫的形象

  1. 使用蒙版 2 修复上面的图像

解决方案绝对可以通过对蒙版执行形态学操作来去除线条来改进。也分享你的想法

【讨论】:

  • 像绿色和蓝色线周围的阴影没有被保留,那么我应该怎么做才能保留绿色和蓝色线周围的阴影
  • 还有白线融合不好,如何进一步改进,使白线融合完全合适。
  • @AayushGadia 这很难。我正在研究它
【解决方案2】:

通过像@jeru-luke所说的那样做,结果会是这样的:

import cv2 as cv
import numpy as np

img = cv.imread('z12.png', 1)


hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
lower_green = np.array([30, 70, 20])
upper_green = np.array([70, 255, 255])
lower_blue = np.array([95, 110, 20])
upper_blue = np.array([135, 255, 255])
mask = cv.inRange(hsv, lower_green, upper_blue)

mask = cv.bitwise_not(mask)
bk = np.full(img.shape, 255, dtype=np.uint8)  # white bk

fg_masked = cv.bitwise_and(img, img, mask=mask)

# get masked background, mask must be inverted
mask = cv.bitwise_not(mask)
bk_masked = cv.bitwise_and(bk, bk, mask=mask)

# combine masked foreground and masked background
final = cv.bitwise_or(fg_masked, bk_masked)
cv.imwrite('out_put.png', final)
cv.imshow('final', final), cv.waitKey(0)

【讨论】:

  • 像绿色和蓝色线周围的阴影没有被保留,那么我应该怎么做才能保留绿色和蓝色线周围的阴影
  • 还有白线融合不好,如何进一步改进,使白线融合完全合适。
【解决方案3】:
import cv2 as cv
import numpy as np
img= cv.imread(r'input.png',1)

hsv=cv.cvtColor(img,cv.COLOR_BGR2HSV)
h,s,v = cv.split(hsv)
th, threshed = cv.threshold(s, 100, 255, cv.THRESH_OTSU|cv.THRESH_BINARY) #black background
mask_w = cv.bitwise_not(threshed)     #white background
fg_masked = cv.bitwise_and(v, v, mask=mask_w) #masking the image of shirt with mask_w
dst = cv.inpaint(fg_masked,threshed,3, cv.INPAINT_NS) #inpainting 

#Dilation & Erosion.
kernel = np.ones((4, 4),np.uint8)
dilation = cv.dilate(dst,kernel,iterations = 2)
erosion = cv.erode(dilation, kernel, iterations=1)
dilation2= cv.dilate(erosion,kernel,iterations = 1)
dilation3= cv.dilate(dilation2,kernel,iterations = 1)
erosion_final = cv.erode(dilation3, kernel, iterations=3)
cv.imwrite("output_2 [improved].png", erosion_final)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多