C++ Opencv像素值统计

知识点
最小值(min)
最大 值(max)
均值(mean)
标准方差(standard deviation)

API

1.最大最小值minMaxLoc

函数原型:

void minMaxLoc( const Mat& src,  double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, const Mat& mask=Mat() );
void minMaxLoc(const MatND& src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0, const MatND& mask=MatND() );
void minMaxLoc(const SparseMat& src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0);

InputArray类型的src,输入单通道数组(图像)。
double类型的minVal,返回最小值的指针。若无须返回,此值置为NULL。
double
类型的maxVal,返回最大值的指针。若无须返回,此值置为NULL。
Point类型的minLoc,返回最小位置的指针(二维情况下)。若无须返回,此值置为NULL。
Point
类型的maxLoc,返回最大位置的指针(二维情况下)。若无须返回,此值置为NULL。
InputArray类型的mask,用于选择子阵列的可选掩膜。

说明:
1 minMaxLoc寻找矩阵(一维数组当作向量,用Mat定义) 中最小值和最大值的位置.
2 参数若不需要,则置为NULL或者0,即可.
3 minMaxLoc针对Mat和MatND的重载中 ,第5个参数是可选的(optional),不使用不传递即可.

PS:minMaxLoc针对单通道图像,minMaxIdx则不限制(不过输出的坐标会变成三维)。

2.计算均值与标准方差meanStdDev

void meanStdDev(InputArray src,OutputArray mean, OutputArray stddev, InputArray mask=noArray())

src:输入矩阵,这个矩阵应该是1-4通道的,这可以将计算结果存在Scalar_ ‘s中
mean:输出参数,计算均值
stddev:输出参数,计算标准差
mask:可选参数

Point类的介绍请参考这里

	Mat image = imread("C:/Users/86156/Pictures/Saved Pictures/cwt.jpg");
	double minv, maxv;
	Point minLoc, maxLoc;

	std::vector<Mat>mv;
	split(image, mv);
	for (int i = 0; i < mv.size(); i++) {
		minMaxLoc(mv[i], &minv, &maxv, &minLoc, &maxLoc, Mat());  //minMaxLoc只能用于单通道
		cout << "N0.channels:" << i <<" min value:" << minv << " max value:" << maxv << endl;
	}	
	Mat mean, stddev;
	meanStdDev(image, mean, stddev);
	cout << "mean value:" << mean << endl;
	cout << "stddev value:" << stddev << endl;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中使用OpenCV进行ROI(感兴趣区域)操作可以通过以下步骤实现: 1. 导入OpenCV库: ```cpp #include <opencv2/opencv.hpp> ``` 2. 加载图像: ```cpp cv::Mat srcImage = cv::imread("image.jpg"); ``` 3. 定义ROI区域: ```cpp cv::Rect roiRect(x, y, width, height); ``` 其中,`x`和`y`是ROI区域的左上角坐标,`width`和`height`是ROI区域的宽度和高度。 4. 提取ROI区域: ```cpp cv::Mat roiImage = srcImage(roiRect); ``` 这将从原始图像中提取ROI区域,并将其保存在名为`roiImage`的新图像中。 5. 对ROI区域进行操作: 现在,您可以对提取的ROI区域`roiImage`进行任何所需的操作,例如修改像素值、应用滤波器、计算统计信息等。 下面是一个完整的示例代码,演示如何在C++中使用OpenCV进行ROI操作: ```cpp #include <opencv2/opencv.hpp> int main() { // 加载图像 cv::Mat srcImage = cv::imread("image.jpg"); // 定义ROI区域 cv::Rect roiRect(100, 100, 200, 200); // 提取ROI区域 cv::Mat roiImage = srcImage(roiRect); // 对ROI区域进行操作(这里只是显示ROI图像) cv::imshow("ROI Image", roiImage); cv::waitKey(0); return 0; } ``` 在上面的示例中,我们首先加载了一张图像`srcImage`。然后,我们定义了一个ROI区域`roiRect`,它位于图像中心的正方形区域。接下来,我们使用ROI区域操作符重载提取了ROI图像,并将其保存在`roiImage`中。最后,我们使用`imshow`函数显示ROI图像,并使用`waitKey`等待用户按下任意键来关闭显示窗口。 请确保您已经加载了正确的图像文件,并根据您的需求调整ROI区域的参数。 希望这个示例对您有帮助。如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值