# Import the necessary packages
import cv2
import numpy as np
def back_rm(filename):
# Load the image
img = cv2.imread(filename)
# Convert the image to grayscale
gr = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Make a copy of the grayscale image
bg = gr.copy()
# Apply morphological transformations
for i in range(5):
kernel2 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,
(2 * i + 1, 2 * i + 1))
bg = cv2.morphologyEx(bg, cv2.MORPH_CLOSE, kernel2)
bg = cv2.morphologyEx(bg, cv2.MORPH_OPEN, kernel2)
# Subtract the grayscale image from its processed copy
dif = cv2.subtract(bg, gr)
# Apply thresholding
bw = cv2.threshold(dif, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
dark = cv2.threshold(bg, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
# Extract pixels in the dark region
darkpix = gr[np.where(dark > 0)]
# Threshold the dark region to get the darker pixels inside it
darkpix = cv2.threshold(darkpix, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
# Paste the extracted darker pixels in the watermark region
bw[np.where(dark > 0)] = darkpix.T
cv2.imwrite('final.jpg', bw)
back_rm('watermark.jpg')
这是最终结果:
使用numpy的处理时间非常短
time python back_rm.py
real 0m0.391s
user 0m0.518s
sys 0m0.185s
0
首先,我有这张图片,我想制作一个可以检测类似图片并从中删除圆圈(水印)的应用程序。
到目前为止,我所做的是:
bitwise_and
)的带有灰度级的新圆为我提供了只有该圆的图像bitwise_or
位或阈值的结果我的问题是,在此圆圈内的弯曲白线上没有出现任何黑色文本。我尝试通过使用像素值而不是阈值来消除颜色,但是问题是相同的。那么有什么解决方案或建议吗?
结果如下: