• 0

  • 0

C++ opencv计算图像的水平投影,并返回一幅图像

LeeHongChi_

欢迎交流

3星期前

效果图

输入图像

在这里插入图片描述

输出图像

在这里插入图片描述

代码

//计算图像的水平投影,并返回一幅图像
cv::Mat getVerProjImage(const cv::Mat &image)
{
    
	cv::Mat matTmp = image.clone();
	int maxCol = 0, maxNum = 0;//重置255最大数目和最大行
	int minCol = 0, minNum = matTmp.rows;//重置255最小数目和最小行
	int height = matTmp.rows, width = matTmp.cols;//图像的高和宽
	int tmp = 0;//保存当前行的255数目
	int *projArray = new int[width];//保存每一行255数目的数组

	cv::namedWindow("matTmp", 0);
	cv::imshow("matTmp", matTmp);

	//循环访问图像数据,查找每一行的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;
			}
		}
		projArray[col] = tmp;
		if (tmp > maxNum)
		{
    
			maxNum = tmp;
			maxCol = col;
		}
		if (tmp < minNum)
		{
    
			minNum = tmp;
			minCol = col;
		}
	}
	//创建并绘制垂直投影图像
	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));
	}

	delete[] projArray;//删除new数组
	return  projImg;
}

使用示例:

	Mat VerProjImage;

	//计算图像的水平投影,并返回一幅图像
	VerProjImage = getVerProjImage(image_part);

参考:
https://blog.csdn.net/sjhuangx/article/details/50100451

免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

0

相关文章推荐

未登录头像

暂无评论