嗯,我是openCV和图像处理的新手,我当然需要帮助。我需要得到Mat的每个像素值。该图像由网络摄像头捕获(实时)。 我已经从一些人的问题中尝试了一些解决方案,但它没有在我的项目上工作。 这是我的一些代码:
Mat blackWhite;
Mat binary;
Mat distanceTr;
cvtColor(frame, blackWhite, CV_BGR2GRAY);
GaussianBlur(blackWhite, blackWhite, Size(15,15), 6.5, 6.5);
threshold(blackWhite, binary, 80, 255, CV_THRESH_BINARY);
Mat invBinary = Scalar(255) - binary;
distanceTransform(invBinary, distanceTr, CV_DIST_L2,3);
我对像素值的访问,我做了这个:
for(int i = 0; i < distanceTr.rows; i++)
{
for(int j = 0; j < distanceTr.cols; j++)
{
if(distanceTr.at<uchar>(0,0) == 0)
{
cout << 1;
}
}
}
对于网络摄像头节目,我使用
imshow("Project", distanceTr);
据我所知,distanceTr是灰度图像,所以它是1通道图像。基于一些答案,我尝试了.at&lt;&gt;但它没有工作:( 我正在做一个测试用例,如果(0,0)像素是黑色的,它会打印1.我得到的是未处理的异常错误。 你能帮忙吗?
非常感谢你。 (抱歉英文不好)
答案 0 :(得分:2)
distanceTransform的输出图片属于CV_32FC1
,因此每个像素的类型为float
。要访问像素值,您必须执行以下操作:
if(distanceTr.at<float>(0,0) == 0)
{
cout<<1;
}
在opencv documentation中,给出了每个函数参数的描述,比如图像的大小和类型等。