gpt4 book ai didi

c++ - 为什么meanStdDev()返回[nan]?

转载 作者:行者123 更新时间:2023-12-02 10:19:33 27 4
gpt4 key购买 nike

我想使用C++中的OpenCV计算图像的标准偏差。但是,我得到非常奇怪的结果。
我的代码:

#include <iostream>
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;

int main() {
VideoCapture cap("Sample-Video.mp4");
Mat frame;
ret = cap.read(frame);

Scalar m, stdv;
cvtColor(frame, frame, COLOR_BGR2GRAY);
Laplacian(frame, frame, CV_64F, 3);
meanStdDev(frame, m, stdv);

cout << stdv << endl;
}

它总是输出:
[0, 0, 0, 0]
[nan, 0, 0, 0]
[nan, 0, 0, 0]
[-nan, 0, 0, 0]
[-nan, 0, 0, 0]
[-nan, 0, 0, 0]
[nan, 0, 0, 0]
[nan, 0, 0, 0]
[nan, 0, 0, 0]
[nan, 0, 0, 0]
[nan, 0, 0, 0]
[nan, 0, 0, 0]

等等。哪里出问题了?

最佳答案

因此,到目前为止,我已经知道问题出在我自己。不允许在cvtColor()和Laplacian()函数中两次使用相同的变量,这意味着您的源和目标不能相同。其他编程语言(例如Python)能够解决该问题,而C++则不能。

无论如何,这是我的正确代码,如何获取图像的拉普拉斯方差:

#include <iostream>
#include <cmath>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;

double give_laplacian(Mat *fr) {
Scalar m, stdv;
Mat gray, lap;

cvtColor(*fr, gray, COLOR_BGR2GRAY);
Laplacian(gray, lap, CV_64F);
meanStdDev(lap, m, stdv, Mat());

return pow(stdv.val[0], 2);
}

int main() {
Mat frame;

//here you get your frame, e.g. from a video with a cap etc.

val = give_laplacian(&frame);
cout << "Sharpness value: " << val << endl;
}

希望能帮助到你。

关于c++ - 为什么meanStdDev()返回[nan]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60834697/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com