我试图检测图像是否是卡通片或是否是真人。我搜索了谷歌并实施了两种提到的算法,但两者都无法准确预测图像是由相机拍摄的人还是动画片/动漫角色
这是我的剧本:
detectCartoon1使用拉普拉斯算法来检测图像是否是人。 (我认为相机镜头的质量会降低,因此这很容易实现)。但它失败了 - 它给了我很多误报。
detectCartoon2使用其他人提到的堆栈溢出方法。它表明,在我们将过滤器应用于漫画之后,不会有太多变化;但如果我们应用从较低质量的相机/网络摄像头拍摄的照片,将会有很多变化。再次,大量的误报。
我一直在谷歌寻找其他方法 - 或试图想出我自己的方法,但我想不出任何事情。我非常感谢有关这个主题的任何帮助。
谢谢!
import cv2
import numpy
def detectCartoon1(imagePath):
img_before = cv2.imread(imagePath)
img_after = 0
gray = cv2.GaussianBlur(img_before, (3, 3), 0, 0, cv2.BORDER_DEFAULT)
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2GRAY)
img_after = cv2.Laplacian(gray, cv2.CV_64F)
img_after = cv2.convertScaleAbs(img_after)
return numpy.mean(img_after)
def detectCartoon2(imagePath):
img_before = cv2.imread(imagePath)
img_after = 0
for i in range(1, 31, 2):
img_after = cv2.bilateralFilter(img_before, i, i*2, i/2)
img_after = cv2.cvtColor(img_after, cv2.COLOR_HSV2BGR_FULL)
img_before = cv2.cvtColor(img_before, cv2.COLOR_HSV2BGR_FULL)
return numpy.mean(img_before - img_after)
from os import listdir
for img in listdir('Save'):
img = 'Save\\' + img
dc1 = detectCartoon1(img)
dc2 = detectCartoon2(img)
print('Img: ' + img + ' detectCartoon1: ' + str(dc1) + ' detectCartoon2: ' + str(dc2))