使用OpenCv C ++检测给定图像中大多数扩散颜色的确切颜色范围

时间:2015-12-04 16:41:59

标签: c++ arrays opencv numbers standard-deviation

我是OpenCV的新手,使用opencv c ++开发图像处理程序。我有一个只定义颜色的图像(前 - 粉红色)。

enter image description here

我得到图像的RGB值为3个独立的数组。如果我考虑R值数组,我可以得到类似下面的数字。如果我考虑数字集,有一个标准值,其他数字应该有一个接近的值它。但是有一些数字与这个数字高度偏离,我想从数字集中删除它们。在下面的数字集中应该删除0,0,0,0,0,0,0,1,57和243,255 ,255。最后我想获得给定彩色图像的颜色范围。我想获得166-170范围的簇。什么是解决这个问题的最佳方法?有没有简单的方法来解决这个使用opencv?或者必须开发算法?

0,0,0,0,0,0,0,1,56,166,166,166,166,166,166,166,166,167,167,167,167,167,167,167 ,167,167,167,167,167,167,167,167,167,167,167,167,167,168,168,168,168,168,168,168,168,168,168,168,168 ,168,168,168,168,169,169,169,169,169,169,169,169,170,170,170,243,255,255

这是我的

        Mat image;
        image = imread("saved.jpg", CV_LOAD_IMAGE_COLOR);
        const int SIZE = image.rows*image.cols;
        int bValue[SIZE];
        int gValue[SIZE];
        int rValue[SIZE];
        int index = 0;
        for(int i=1;i <= image.rows; i++){
            for(int j=1;j <= image.cols; j++){
                int b = (int)(image).at<cv::Vec3b>(j,i)[0];
                int g = (int)(image).at<cv::Vec3b>(j,i)[1];
                int r = (int)(image).at<cv::Vec3b>(j,i)[2];

                bValue[index]= b ;
                gValue[index]= g ;
                rValue[index]= r ;
                index++;                    
            }                
        }
        sort(bValue,bValue+SIZE);
        sort(gValue,gValue+SIZE);
        sort(rValue,rValue+SIZE);

0 个答案:

没有答案