尝试在给定阈值处将所有像素更改为黑白
Posted
技术标签:
【中文标题】尝试在给定阈值处将所有像素更改为黑白【英文标题】:Trying to change all the pixels to black and white at a given threshold 【发布时间】:2018-02-03 12:27:50 【问题描述】:我正在尝试制作黑白图像,因此我将阈值设置为 100。低于 100 的所有值都是黑色的,其余的都是白色的。所以我遍历每个像素并检查它的值是否低于 100 然后我将值更改为 0 否则我将其更改为 255。但代码不起作用。当我打印图像的值时。图像的所有值都变为 225。 运行前的图像The input image 这是运行后的图像the output
int main()
int x;
Mat img = imread("Canny.png");
cout << depthToStr(img.depth()) << endl;
img.convertTo(img, CV_32S);
// threshold 100.
for (int z = 0; z < img.rows; z++)
for (int y = 0; y < img.cols; y++)
if (img.at<int>(z,y) >= 100);
img.at<int>(z, y) = 225;
// Print the images.
for (int z = 0; z < img.rows; z++)
for (int y = 0; y < img.cols; y++)
cout << img.at<int>(z, y) << "\t";
cout << endl;
img.convertTo(img, CV_8U);
imshow(" ",img);
waitKey(0);
cin >> x;
waitKey(0);
return 0;
【问题讨论】:
在阈值化之前检查图像中存在的值范围,以便能够选择合理的阈值***.com/a/15956104/2836621 【参考方案1】:if
语句有一个错误。去掉末尾的分号。
if( img.at<int>(z,y) >= 100 )
img.at<int>(z, y) = 255;
else
img.at<int>(z, y) = 0;
【讨论】:
【参考方案2】:请注意,您很可能不想遍历所有像素,因为它可能没有针对某些处理器进行很好的优化。使用opencv你可以简单地写
img = img > 100;
这将与您的周期相同。
另一个选项是opencv函数threshold
threshold(img, img, 100, 255, THRESH_BINARY)
【讨论】:
以上是关于尝试在给定阈值处将所有像素更改为黑白的主要内容,如果未能解决你的问题,请参考以下文章