OpenCV中的嘈杂色调

Raj*_*eep 4 c++ opencv visual-studio-2008

这个问题是关于在VS2008 express中使用c ++的opencv.

我做的很简单.试图从相机图像中获取皮肤值.

正如您在屏幕截图中看到的,相机图像看起来相当不错.我正在将它转换为HSV并将Hue通道与之后的皮肤值分开.但是Hue频道看起来太吵了,太多了.HSV图像窗口也显示信息的劣化.为什么会这样?以及如何解决这个问题.如果我们不能通过某种平滑去除噪音?代码如下:

#include <opencv2/opencv.hpp>
int main(){
    cv::VideoCapture cap(0); // open the default camera   
    cv::Mat hsv, bgr, skin;//make image & skin container
    cap >> bgr; 
    //cvNamedWindow("Image");
    //cvNamedWindow("Skin");    
    //cvNamedWindow("Hue");
    cv::cvtColor(bgr, hsv, CV_BGR2HSV);
    std::vector<cv::Mat> channels;
    cv::split(hsv, channels);
    cv::Mat hue;
    hue = channels[0];  
    cv::imshow("Image", bgr);cvMoveWindow("Image",0,0);
    cv::imshow("HSV", hsv);cvMoveWindow("HSV",660,0);
    cv::imshow("Hue", hue);cvMoveWindow("Hue",0,460);   

    cvWaitKey(0);//wait for key press   
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Dre*_*ann 6

顺化通道看起来太嘈杂和颗粒感.为什么会这样?

在我们看到的真实世界颜色中,由"色调"表示的信息部分会有所不同.红色完全由色调描述.布莱克根本没有色调信息.

但是,当您在HSV中表示颜色时,色调始终是颜色信息的三分之一.

因此,当颜色接近任何灰色阴影时,色调成分将被人为地膨胀.这就是你所看到的颗粒感.越接近灰色,必须放大越多的色调,包括捕获的色调中的错误.

HSV图像窗口也显示信息的劣化.为什么会这样?

转换中会出现舍入错误,但可能没有您想象的那么多.尝试将您的HSV图像转换回BGR以查看实际发生的降级程度.

以及如何解决这个问题.

实际上,您有两种选择.

使用更高质量的相机,或不使用HSV格式.