我是OpenCV的新手,使用opencv c ++开发图像处理程序。我有一个只定义颜色的图像(前 - 粉红色)。
我得到图像的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);