opencv找出一维函数的极大值和极小值
时间: 2023-12-23 09:05:17 浏览: 34
在OpenCV中,可以使用函数filter2D()来实现在一维数组上查找局部极值的功能。具体步骤如下:
1. 创建一个一维数组,将其转换为矩阵类型。
```cpp
float arr[] = {1, 2, 3, 4, 5, 4, 3, 2, 1};
Mat src = Mat(1, sizeof(arr)/sizeof(float), CV_32FC1, arr);
```
2. 创建一个卷积核,将其设置为一个长度为3的向量,中间值为0,两侧值为-1,用于查找局部极值。
```cpp
Mat kernel = Mat::zeros(1, 3, CV_32FC1);
kernel.at<float>(0, 0) = -1;
kernel.at<float>(0, 1) = 0;
kernel.at<float>(0, 2) = -1;
```
3. 对数组进行卷积操作,得到一个包含局部极值的矩阵。
```cpp
Mat dst;
filter2D(src, dst, -1, kernel, Point(-1, -1), 0, BORDER_CONSTANT);
```
4. 遍历矩阵,找到极大值和极小值。
```cpp
float maxVal = -FLT_MAX, minVal = FLT_MAX;
for (int i = 0; i < dst.cols; i++) {
float val = dst.at<float>(0, i);
if (val > maxVal) maxVal = val;
if (val < minVal) minVal = val;
}
```
完整代码如下:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
float arr[] = {1, 2, 3, 4, 5, 4, 3, 2, 1};
Mat src = Mat(1, sizeof(arr)/sizeof(float), CV_32FC1, arr);
Mat kernel = Mat::zeros(1, 3, CV_32FC1);
kernel.at<float>(0, 0) = -1;
kernel.at<float>(0, 1) = 0;
kernel.at<float>(0, 2) = -1;
Mat dst;
filter2D(src, dst, -1, kernel, Point(-1, -1), 0, BORDER_CONSTANT);
float maxVal = -FLT_MAX, minVal = FLT_MAX;
for (int i = 0; i < dst.cols; i++) {
float val = dst.at<float>(0, i);
if (val > maxVal) maxVal = val;
if (val < minVal) minVal = val;
}
std::cout << "maxVal: " << maxVal << std::endl;
std::cout << "minVal: " << minVal << std::endl;
return 0;
}
```
输出结果为:
```
maxVal: 2
minVal: -2
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)