gpt4 book ai didi

python - 在 Python 中删除带有水印的图像上的黑色边框

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:40 24 4
gpt4 key购买 nike

我有一堆图像,我想通过去除黑色边框来统一它们。通常我使用带有模糊参数的 Imagemagick 的 Trim 函数,但如果图像有一些水印,结果不在这里。

实际上,我正在使用 opencv 和形态变换进行一些测试,以尝试识别水印和图像,然后选择更大的元素,但我真的是 opencv 的新手,我很挣扎。

水印可以无处不在,从左下角到右上角。

black borders with watermak 1 black borders with watermak 2 black borders with watermak 3

我更喜欢 Python 代码,但欢迎使用 Imagemagick 或类似应用程序。

实际上只使用 opencv 我得到了这个结果:

import copy
import cv2

from matplotlib import pyplot as plt


IMG_IN = '/data/black_borders/island.jpg'


# keep a copy of original image
original = cv2.imread(IMG_IN)

# Read the image, convert it into grayscale, and make in binary image for threshold value of 1.
img = cv2.imread(IMG_IN,0)

# use binary threshold, all pixel that are beyond 3 are made white
_, thresh_original = cv2.threshold(img, 3, 255, cv2.THRESH_BINARY)

# Now find contours in it.
thresh = copy.copy(thresh_original)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# get contours with highest height
lst_contours = []
for cnt in contours:
ctr = cv2.boundingRect(cnt)
lst_contours.append(ctr)
x,y,w,h = sorted(lst_contours, key=lambda coef: coef[3])[-1]


# draw contours
ctr = copy.copy(original)
cv2.rectangle(ctr, (x,y),(x+w,y+h),(0,255,0),2)


# display results with matplotlib

# original
original = original[:,:,::-1] # flip color for maptolib display
plt.subplot(221), plt.imshow(original)
plt.title('Original Image'), plt.xticks([]),plt.yticks([])

# Threshold
plt.subplot(222), plt.imshow(thresh_original, cmap='gray')
plt.title('threshold binary'), plt.xticks([]),plt.yticks([])

# selected area for future crop
ctr = ctr[:,:,::-1] # flip color for maptolib display
plt.subplot(223), plt.imshow(ctr)
plt.title('Selected area'), plt.xticks([]),plt.yticks([])

plt.show()

结果:

enter image description here

最佳答案

去除黑边:-

点击此链接(我认为是完美答案):-
Crop black edges with OpenCV

要通过指定区域删除黑色边框,请点击此链接
How to crop an image in OpenCV using Python

您可以只采用 ROI(感兴趣区域),而不是从图像中裁剪任何部分。为此,请点击此链接,
How to copy a image region using opencv in python?

去除水印:-

如果水印可能出现在图像的任何位置,则意味着您无法完全清除水印。只是您可以对该图像应用模糊效果。它会模糊你的水印。
链接:
https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_filtering/py_filtering.html


如果水印仅存在于黑色边框上,则上述方法将解决您的问题。

关于python - 在 Python 中删除带有水印的图像上的黑色边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com