saturate_cast用于防止数据溢出。
优质博客:
https://blog.csdn.net/stack_moon/article/details/82285403?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allbaidu_landing_v2~default-1-82285403.nonecase&utm_term=opencv%E5%83%8F%E7%B4%A0%E8%A1%A8%E7%A4%BA&spm=1000.2123.3001.4430
遍历单通道图像的像素:
for (int i = 0; i < dstImage.rows - 1; i++)
{
for (int j = dstImage.cols - 2; j > 1; j--)
{
if (dstImage.at<uchar>(i, j) == dstImage.at<uchar>(i, j - 1))
continue;
else //遇到了白色
{
x.push_back(j);
y.push_back(i);
break; //已经找到间断点,跳出循环
}
}
}
遍历三通道图像的像素:
Mat BinRGBImg = srcImage.clone(); //用双重循环给此MAT赋值
unsigned char pixelB, pixelG, pixelR;
for (int i = 0; i < srcImage.rows; i++) //通过颜色分量将图片进行二值化处理
{
for (int j = 0; j < srcImage.cols; j++)
{
pixelB = srcImage.at<Vec3b>(i, j)[0]; //获取图片各个通道的值
pixelG = srcImage.at<Vec3b>(i, j)[1];
pixelR = srcImage.at<Vec3b>(i, j)[2];
// 用PS读取各像素点RGB通道值,可得知圆R、G、B范围
if (pixelB < 95 && pixelB>45 && pixelR < 70 && pixelR>45)
{ //将各个通道的值和各个通道阈值进行比较
BinRGBImg.at<Vec3b>(i, j)[0] = 255; //符合颜色阈值范围内的设置成白色
BinRGBImg.at<Vec3b>(i, j)[1] = 255;
BinRGBImg.at<Vec3b>(i, j)[2] = 255;
}
else
{
BinRGBImg.at<Vec3b>(i, j)[0] = 0; // 不符合颜色阈值范围内的设置为黑色
BinRGBImg.at<Vec3b>(i, j)[1] = 0;
BinRGBImg.at<Vec3b>(i, j)[2] = 0;
}
}
}