使用OpenCV计算黑色像素
Count the black pixels using OpenCV
我在opencv 2.4.0
和C++
工作
正在尝试做一个练习,说我应该加载一个 RGB 图像,将其转换为灰度并保存新图像。下一步是将灰度图像制作成二进制图像并存储该图像。我有这么多工作。
我的问题是计算二进制图像中黑色像素的数量。
到目前为止,我已经在网上搜索并查看了这本书。我发现似乎最有用的方法是。
int TotalNumberOfPixels = width * height;
int ZeroPixels = TotalNumberOfPixels - cvCountNonZero(cv_image);
但是我不知道如何存储这些值并在cvCountNonZero()
中使用它们. 当我将要计数的图像传递给此函数时,出现错误。
int main()
{
Mat rgbImage, grayImage, resizedImage, bwImage, result;
rgbImage = imread("C:/MeBGR.jpg");
cvtColor(rgbImage, grayImage, CV_RGB2GRAY);
resize(grayImage, resizedImage, Size(grayImage.cols/3,grayImage.rows/4),
0, 0, INTER_LINEAR);
imwrite("C:/Jakob/Gray_Image.jpg", resizedImage);
bwImage = imread("C:/Jakob/Gray_Image.jpg");
threshold(bwImage, bwImage, 120, 255, CV_THRESH_BINARY);
imwrite("C:/Jakob/Binary_Image.jpg", bwImage);
imshow("Original", rgbImage);
imshow("Resized", resizedImage);
imshow("Resized Binary", bwImage);
waitKey(0);
return 0;
}
到目前为止,这段代码是非常基本的,但它现在应该做它应该做的事情。稍后将进行一些调整以清理它:)
您可以使用countNonZero
来计算图像中非黑色 (>0) 的像素数。如果要计算黑色(==0)像素的数量,则需要从图像中的像素数(图像宽度*高度)中减去非黑色的像素数。
此代码应该有效:
int TotalNumberOfPixels = bwImage.rows * bwImage.cols;
int ZeroPixels = TotalNumberOfPixels - countNonZero(bwImage);
cout<<"The number of pixels that are zero is "<<ZeroPixels<<endl;
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 在 OpenCV 和 C++ 中查找距轮廓中心最近的黑色像素
- GDI+:如何将黑色像素替换为红色像素
- 如何查找黑色像素位置
- 从HWND获取并保存位图(每个像素8,4,1位-黑色图像)
- C/C++LIBTIFF:需要从BW TIFF文件中读取白色和黑色像素的像素位置
- 使用OpenCV计算黑色像素
- 如果新图像中的原始像素为黑色,则Qt绘制一个蓝色像素
- 在opencvc++中设置彩色图像中的像素(i,j)为黑色
- 渲染到纹理,读取像素的结果大部分是黑色的
- 如何确定 OpenCV 中的像素是黑色还是白色
- 最右边的黑色像素