针对原始图像进行分块,计算求解分块区域的均值和方差。对分块区域进行分块阈值处理(后续处理,值得研究的)
- 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.