C++ 计算黑白图像的像素数(OpenCV/C+;+;)
我是opencv/C++的初学者,希望您能帮助我解决一个看似简单的问题。作为一个例子,我有这样的图像: 。。。并且会忽略背景,背景总是白色的,图像总是黑白的,只剩下云可以计算三件事:C++ 计算黑白图像的像素数(OpenCV/C+;+;),c++,opencv,C++,Opencv,我是opencv/C++的初学者,希望您能帮助我解决一个看似简单的问题。作为一个例子,我有这样的图像: 。。。并且会忽略背景,背景总是白色的,图像总是黑白的,只剩下云可以计算三件事: 图形的像素数(仅云,不考虑背景) 白色像素的数量。(仅限云计算) 黑色像素的数量。(仅限云计算) 我知道要达到2,用减法第3次 谢谢 这里有一个非常简单的方法 计算黑色像素数(3) 从任何角落开始用黑色填充洪水 计算剩余的白色像素数(2) 将结果(2)和(3)相加得到(1) 您可以使用此代码计数以查找图像中的黑
谢谢 这里有一个非常简单的方法
- 计算黑色像素数(3)
- 从任何角落开始用黑色填充洪水
- 计算剩余的白色像素数(2)
- 将结果(2)和(3)相加得到(1)
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("/home/jordan/opencv/Test/edge_detection/img2.bmp",0);
cout<<"cols= "<<img.cols<<"row= "<<img.rows<<"\n";
int i,j,count=0;
for(i=0;i<img.cols;i++)
{
for(j=0;j<img.rows;j++)
{
int k=img.at<uchar>(j,i);
if(k==0)
{
count++;
cout<<"col="<<i<<"row="<<j<<"k= "<< k<<"\t\n";
}
}
}
cout<<"count="<<count<<"\n";
}
#包括
#包括
使用名称空间std;
使用名称空间cv;
int main()
{
Mat img=imread(“/home/jordan/opencv/Test/edge_detection/img2.bmp”,0);
cout首先,您可以使用cv::countNonZero(img)
来计算非黑色像素。因此,您可以使用(img.rows*img.cols)-cv::countNonZero(img)
来计算黑色像素
现在,尝试以下操作:首先,计算黑色像素数。然后尝试使用形态学打开删除CLOLD中的白色斑点。然后,再次计算黑色像素数。现在,可以从第二个计数中减去第一个计数,得到这些斑点中的白色像素数
然而,这种方法并不准确,因为形态开口也会改变云的外部。另一种方法是在另一个答案中建议的方法,使用泛光填充以黑色填充周围的白色像素
顺便说一句,形态学开放是这样工作的:
cv::Mat element = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2 * openingRadius + 1, 2 * openingRadius + 1));
cv::morphologyEx(mat, mat, cv::MORPH_OPEN, element);
或者,使用cuda:
cv::Mat element = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2 * openingRadius + 1, 2 * openingRadius + 1));
cv::cuda::createMorphologyFilter(cv::MORPH_OPEN, CV_8UC1, element)->apply(gpuMat, gpuMat);
我认为使用(img.rows*img.cols)-cv::countNonZero(img)