OpenCV 计算区域的内部参数

时间:2023-11-28 13:08:44

opencv中有矩形的Rect函数、圆形的circl函数等,那么任意形状怎么取呢?方法1:点乘,将其形状与图像进行点乘,求其形状对应的图像形状;方法2:用findContours函数得对应的形状区域,其边缘显示类型可以通过设置参数可以控制;

方法1:点乘

 //===============================对应灰度图的区域segImage==============================================================
// 遍历图像 对每个非零像素值赋值为对应灰度图的像素值 Mat zeroImage(Size(rioImage.cols, rioImage.rows), CV_8U, Scalar());//建立全0矩阵
for (int i = ; i < closeImg.rows; i++)//行遍历
{ unsigned char* ptr = (unsigned char*)closeImg.data + closeImg.step*i; for (int j = ; j < closeImg.cols; j++)//列遍历
{
int intensity = ptr[j];
if (intensity != ) {
zeroImage.at<uchar>(i, j) = rioImage.at<uchar>(i, j);//对应位置赋值为灰度图像素
}
}
} zeroImage.copyTo(segImage);
//imshow("segImage.jpg", segImage);
//waitKey(0);
}

对于一个区域,怎么进一步针对区域内部特征进行处理呢 ? 首先,我们要提取出来内部的某些特征才能说话,下面提取一些简单的特征,话不多说见代码:

1.平均数及方差参数:

 Mat tempMean, tempStddv;
double MEAN, STDDV;// mean and standard deviation of the flame region
double m = mean(flameRectRegion)[];
//cout << "mean=" << m << endl;
meanStdDev(flameRectRegion, tempMean, tempStddv); MEAN = tempMean.at<double>(, );
STDDV = tempStddv.at<double>(, );
//cout << "mean=" << MEAN << endl;
//cout << "stddv=" << STDDV << endl;