我试图检测图像是卡通还是真实人物。我已经搜索过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/

10-12 16:59