我试图检测图像是卡通还是真实人物。我已经搜索过Google并实现了提到的两种算法,但都无法准确预测图像是相机拍摄的人物还是卡通/动漫人物
这是我的脚本:
detectCartoon1使用Laplacian方法检测图像是否是人。 (我认为相机拍摄的画质会降低,因此很容易工作)。但是它失败了,它给了我大量的误报。
detectCartoon2使用堆栈溢出时其他人提到的方法。它表明,将滤镜应用于卡通片之后,不会有太多更改。但是如果我们应用从质量较低的相机/网络摄像头拍摄的照片,将会有很多变化。再次,大量的误报。
我一直在Google周围搜索其他方法-或试图考虑自己的方法,但是我什么都没想到。对此,我将不胜感激。
谢谢!
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))
最佳答案
这是有关您的问题的好论文:http://www.uv.es/~tzveta/invwork.pdf
关于python - 检测图像是卡通还是OpenCV的真实人物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22264469/