C++ opencv block it to calculate the variance and the mean

55 篇文章 0 订阅
50 篇文章 1 订阅

针对原始图像进行分块,计算求解分块区域的均值和方差。对分块区域进行分块阈值处理(后续处理,值得研究的)

  •  The mean value and variance of the block region are calculated by partitioning the original image.Partitioning threshold processing for partitioned regions (subsequent processing, worthy of study)
void PreThreshold(Mat srcimage)
{
	//=====================================================================================
	//=====================================================================================
	// 源图像转换为灰度图
	Mat gray;
	if (srcimage.channels() == 3)
	{
		cvtColor(srcimage, gray, CV_BGR2GRAY);
	}
	else
	{
		gray = srcimage;

	}
	Mat bw;
	threshold(gray, bw, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);//OTSU 二值化
	//=====================================================================================
	//区域分割划分
	//=====================================================================================
	/*
	p1  p2 p3
	p4  p5 p6
	p7  p8 p9
	*/
	int width  = bw.cols;
	int height = bw.rows;
	Point2d p2(width / 2, height / 4);
	Point2d p5(width / 2, height / 2);
	Point2d p8(width / 2, height / 2 + height / 4);

	Point2d p1(width / 4, height / 4);
	Point2d p4(width / 4, height / 2);
	Point2d p7(width / 4, height / 2 + height / 4);

	Point2d p3(width / 4 + width / 2, height / 4);
	Point2d p6(width / 4 + width / 2, height / 2);
	Point2d p9(width / 4 + width / 2, height / 2 + height / 4);

	Rect p1_select(
		(0),
		(0),
		(p2.x),
		(p5.y));
	Mat p1_image = bw(p1_select);//对目标图像进行裁剪保存
	Rect p2_select(
		(p1.x),
		(0),
		(p3.x-p1.x),
		(p5.y));
	Mat p2_image = bw(p2_select);//对目标图像进行裁剪保存

	Rect p3_select(
		(p2.x),
		(0),
		(bw.cols - p2.x),
		(p5.y));
	Mat p3_image = bw(p3_select);//对目标图像进行裁剪保存

	Rect p4_select(
		(0),
		(p1.y),
		(p5.x),
		(p7.y-p1.y));
	Mat p4_image = bw(p4_select);//对目标图像进行裁剪保存

	Rect p5_select(
		(p1.x),
		(p1.y),
		(p3.x-p1.x),
		(p8.y-p2.y));
	Mat p5_image = bw(p5_select);//对目标图像进行裁剪保存

	Rect p6_select(
		(p2.x),
		(p2.y),
		(bw.cols - p2.x),
		(p9.y-p3.y));
	Mat p6_image = bw(p6_select);//对目标图像进行裁剪保存
	Rect p7_select(
		(0),
		(p5.y),
		(p5.x),
		(bw.rows - p5.y));
	Mat p7_image = bw(p7_select);//对目标图像进行裁剪保存
	Rect p8_select(
		(p4.x),
		(p4.y),
		(p6.x - p4.x),
		(bw.rows - p5.y));
	Mat p8_image = bw(p8_select);//对目标图像进行裁剪保存

	Rect p9_select(
		(p5.x),
		(p5.y),
		(bw.cols - p5.x),
		(bw.rows - p5.y));
	Mat p9_image = bw(p9_select);//对目标图像进行裁剪保存
	//=====================================================================================
	//=====================================================================================
	std::pair<float, float> val;
	val = cal_mean_std(bw.data, bw.rows, bw.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p1_image.data, p1_image.rows, p1_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p2_image.data, p2_image.rows, p2_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p3_image.data, p3_image.rows, p3_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p4_image.data, p4_image.rows, p4_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p5_image.data, p5_image.rows, p5_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p6_image.data, p6_image.rows, p6_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p7_image.data, p7_image.rows, p7_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p8_image.data, p8_image.rows, p8_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	val = cal_mean_std(p9_image.data, p9_image.rows, p9_image.cols);
	std::cout << "mean : " << val.first << " std:  " << val.second << std::endl;
	//=====================================================================================
	//=====================================================================================

}

result:

  I hope I can help you,If you have any questions, please  comment on this blog or send me a private message. I will reply in my free time.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值