有些视频的帧有黑色的条纹,如边框。我得把它们从镜框里拿出来。我想出了一个粗略的解决方案:
import sys, cv2, numpy
import Image, scipy
filename = "snap.jpeg"
img = cv2.imread(filename)
def checkEqual(lst):
return len(set(lst)) <= 1 ## <-- This is the maximum length of the set
def removeColumns(image):
for col in range(image.shape[1]):
for ch in range(3):
try:
checkEqual(image[:, col, ch].tolist())
except IndexError:
continue
else:
if checkEqual(image[:, col, ch].tolist()):
try:
image = numpy.delete(image, col, 1)
except IndexError:
continue
else:
pass
return image
img2 = removeColumns(img)
print img.shape, img2.shape ## (480, 856, 3) (480, 705, 3)
在这里我找到了具有相同元素的列和所有具有黑色边框的视频。但即使我将函数checkEqual()
中的最大长度从1增加到20或40,也不会删除整个黑色条带。
这是原始图像:
这是运行程序后的图像:
有谁能提出更好地解决这个问题的建议吗? 谢谢!
为什么不计算框架并使用PIL
这个问题已经在this answer中解决了。
我用枕头代替棉花:
结果:
在尝试使用opencv和numpy时,类似这样的方法如何:
相关问题 更多 >
编程相关推荐