【问题标题】:OpenCV python Stamp filter photoshopOpenCV python 邮票过滤器 photoshop
【发布时间】:2017-05-07 05:11:30
【问题描述】:

我是opencv的新手。我有多个图像。如下左上角所示的示例图像之一。基本上我想分离背景和前景,以便边缘清晰,我可以正确检测轮廓。

我尝试了许多过滤器,当然还有使用各种参数的阈值。

最后,当我查看 Photoshop 滤镜库时,我注意到一个名为 Stamp 的滤镜,它给了我想要的结果(右上角)。它使边缘清晰,我想对柔和的角落使用一些模糊。

我不确定如何使用 python CV2 获得与 photoshop 的邮票过滤器相同的操作?

任何帮助或建议将不胜感激。

未修改的原始图像

尝试1:--代码

import cv2
import numpy as np
from matplotlib import pyplot as plt

input_img = cv2.imread('images/Tas/t3.bmp')
desired_img = cv2.imread('images/stamp.jpg')

# gray scale
gray = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)

kernel = np.ones((3,3),np.uint8)

thresh1 = cv2.threshold(input_img,80,255,cv2.THRESH_BINARY)[1]
erosion1 = cv2.erode(thresh1,kernel,iterations = 1)
dilation1 = cv2.dilate(erosion1,kernel,iterations = 1)

thresh2 = cv2.threshold(input_img,120,255,cv2.THRESH_BINARY)[1]
erosion2 = cv2.erode(thresh2,kernel,iterations = 1)
dilation2 = cv2.dilate(erosion2,kernel,iterations = 1)

titles = ['Original', 'Desired','thresh1', 'erosion1','dilation1','thresh2','erosion2','dilation2']
images = [input_img, desired_img, thresh1, erosion1,dilation1, thresh2,erosion2, dilation2]
for i in xrange(8):
  plt.subplot(2,4,i+1),plt.imshow(images[i])
  plt.title(titles[i])
  plt.xticks([]),plt.yticks([])

plt.show()

输出:

【问题讨论】:

  • 它看起来像二值化,可能是腐蚀和膨胀。还显示未修改的原始图像
  • 嗨 @AnderBiguri 刚刚添加了原始图像。
  • @AnderBiguri .. 有什么帮助吗?
  • 是的...我已经给了你。你试过了吗?
  • 嗨@AnderBiguri。是的,我试过但没有得到所需的输出。如果你想看,我可以附上图片。

标签: python opencv image-processing photoshop


【解决方案1】:

为自己添加几个用于高斯模糊和阈值过滤的滑块可能会有所帮助,您可以获得相当不错的结果:

这是我用来生成它的基本 sn-p:

import numpy as np
import cv2
import cv2.cv as cv
from matplotlib import pyplot as plt

# slider callbacks
def printThreshold(x):
    print "threshold",x
def printGaussianBlur(x):
    print "gaussian blur kernel size",x
# make a window to add sliders/preview to
cv2.namedWindow('processed')
#make some sliders
cv2.createTrackbar('threshold','processed',60,255,printThreshold)
cv2.createTrackbar('gaussian blur','processed',3,10,printGaussianBlur)
# load image
img = cv2.imread('cQMgT.png',0)
# continously process for quick feedback
while 1:
    # exit on ESC key
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break

    # Gaussian Blur ( x2 +1 = odd number for kernel size)
    kernelSize = ((cv2.getTrackbarPos('gaussian blur','processed') * 2) + 1)
    blur = cv2.GaussianBlur(img,(kernelSize,kernelSize),0)
    # Threshold
    ret,thresh = cv2.threshold(blur,cv2.getTrackbarPos('threshold','processed',),255,0)
    # show result
    cv2.imshow('processed ',thresh)

# exit
cv2.destroyAllWindows()

随意添加其他过滤器并尝试使用滑块。

【讨论】:

  • 哦 @GeorgeProfenza 你是新手。非常感谢您抽出时间来做这件事。滑块是我没想到的非常酷的主意。主要思想是保持上下骨分离。我肯定会对你的代码进行一些实验,如果我得到结果,我会通知你。
  • 甜蜜!如果答案有帮助,请随意投票/标记您认为合适的;)玩得开心探索过滤器。期待看到什么有效(可能希望通过morphological filters 进入组合(您已经有侵蚀/扩张,也许打开/关闭也可能有帮助)
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2015-03-06
相关资源
最近更新 更多