【发布时间】:2020-03-24 15:58:05
【问题描述】:
我想在 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]
等等。问题出在哪里?
【问题讨论】:
-
在您显示的代码中,
frame未初始化。 -
创建一个minimal reproducible example,也许我们可以看看。
-
它没有。在这里更新之前最好先在家编译一下:)
-
里面没有循环,怎么打印多行呢?
-
@TedLyngmo 我没见过,但我没有在生产中使用
VideoCapture的任何东西。也可能来自它在您的情况下使用的任何 videoio 后端。
标签: c++ opencv mat standard-deviation laplacian