垂直投影后出来的效果图不对,哪位勇士能帮忙看下是什么原因?
cv::Mat getVerProjImage(const cv::Mat& image)
{
cv::Mat matTmp = image.clone();
int height = matTmp.rows;
int width = matTmp.cols;//图像的高和宽
int tmp = 0;
int* projArray = new int[width];
memset(projArray, 0, width * 4);
imwrite("D:\verImg.jpg", image);
//循环访问图像数据,查找每一列的255点的总数
for (int col = 0; col < width; col++)
{
tmp = 0;
for (int row = 0; row < height; row++)
{
if (matTmp.at<uchar>(row, col) == 255)/*白色像素*/
{
tmp++;
//cout << row << "," << col << endl;
}
}
projArray[col] = tmp;
}
//创建并绘制垂直投影图像
cv::Mat projImg(height, width, CV_8U, cv::Scalar(255));
for (int col = 0; col < width; col++)
{
//cv::line(projImg, cv::Point(col, height - projArray[col]), cv::Point(col, height - 1), cv::Scalar::all(0));
cv::line(projImg, cv::Point(col, 0), cv::Point(col, projArray[col]), cv::Scalar::all(0));
}
delete[] projArray;//删除new数组
return projImg;
}
原图:
效果图:
projArray[col] = tmp;
应改为
projArray[col] = (uchar)(1.0*tmp/height*255.0);