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

針對原始圖像進行分塊,計算求解分塊區域的均值和方差。對分塊區域進行分塊閾值處理(後續處理,值得研究的)

  •  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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章