相关疑难解决方法(0)

OpenCV皮肤检测

我一直在做一些皮肤检测,但无法顺利进行.下面的图像包含输入(左)和输出(右),使用下面附带的代码.现在,所需的输出应该是最底部的图像(边缘光滑且没有孔的图像).我如何实现此输出?从哪里开始的示例代码将有很大帮助.

输入(左)和不正确的输出(右):

在此输入图像描述

期望的输出:

在此输入图像描述

用于生成Incorect输出的代码:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int main(){
    Mat src = imread("qq.jpg");
    if (src.empty())
        return -1;
    blur( src, src, Size(3,3) );
    Mat hsv;
    cvtColor(src, hsv, CV_BGR2HSV);
    Mat bw;
    inRange(hsv, Scalar(0, 10, 60), Scalar(20, 150, 255), bw);
    imshow("src", src);
    imshow("dst", bw);
    waitKey(0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

修改后的代码(在Astor的建议之后):(现在的问题是:你如何平滑输出?)

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int findBiggestContour(vector<vector<Point> >);

int main(){
    Mat src = imread("qq.jpg");
    if (src.empty())
        return -1;
    blur( src, src, Size(3,3) );

    Mat hsv;
    cvtColor(src, hsv, CV_BGR2HSV); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv skin flood-fill

10
推荐指数
1
解决办法
2万
查看次数

精确肤色HSV系列

我已经看到所有关于皮肤的HSV颜色空间范围的问题
但是我只能弄清楚这一点

代码 -

CvScalar  hsv_min = cvScalar(0, 30, 60, 0);
CvScalar  hsv_max = cvScalar(20, 150, 255, 0);
//range I am using is { 0,30,60,0 & 20,150,255,0 }
cvCvtColor(src, hsv_image, CV_BGR2HSV);
cvInRangeS (hsv_image, hsv_min, hsv_max, hsv_mask);
cvDilate(hsv_mask,hsv_mask,0,1);
cvErode(hsv_mask,hsv_mask,0,1);
cvSmooth( hsv_mask, hsv_mask, CV_MEDIAN);
Run Code Online (Sandbox Code Playgroud)

此范围的问题( {0,30,60,0和20,150,255,0} )是否检测到红色,当您将手放在红色背景时,它不会跟踪您的皮肤...
请帮助!

opencv skin image-processing hsv computer-vision

7
推荐指数
4
解决办法
4万
查看次数

标签 统计

opencv ×2

skin ×2

c++ ×1

computer-vision ×1

flood-fill ×1

hsv ×1

image-processing ×1