c++ - OpenCV - 具有 filter2D 和双值的 gaussianKernel

标签 c++ opencv

首先,getGaussianKernel 和 filter2D 使用 double 值?如果是,如何?

我有这个:

void smoothAngles(cv::Mat& cos_angles, cv::Mat& angles){
    cv::Mat sin_angles;

    cos_angles.create(angles.size(), CV_64FC1);
    sin_angles.create(angles.size(), CV_64FC1);

    for(int i = 0; i < cos_angles.cols; i++){
        for(int j = 0; j < cos_angles.rows; j++){
            cos_angles.at<double>(i, j) = std::cos(2 * angles.at<double>(i, j));
            sin_angles.at<double>(i, j) = std::sin(2 * angles.at<double>(i, j));
        }
    }

    cv::Mat gaussKernel = cv::getGaussianKernel(5, 1.0, CV_32FC1);

    // aplica o filtro gaussiano low-pass
    cv::filter2D(cos_angles, cos_angles, cos_angles.depth(), gaussKernel);
    cv::filter2D(sin_angles, sin_angles, sin_angles.depth(), gaussKernel);

    for (int i = 0; i < cos_angles.cols; i++) {
        for (int j = 0; j < cos_angles.rows; j++) {
            cos_angles.at<double>(i, j) = std::atan2(sin_angles.at<double>(i, j), cos_angles.at<double>(i, j)) / 2;
        }
    }
}

错误发生在第一次使用filter2D时。错误如下:

FingerPrint - 01(11534) malloc: *** error for object 0x10081a408: incorrect 
checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

我尝试使用 cv::GaussianBlur(cos_angles, cos_angles, cv::Size(5,5), 1.0); 代替,但出现同样的错误。

最佳答案

您使用错误的坐标顺序访问矩阵。第一个坐标必须是行索引和第二个 - 列索引:

for(int i = 0; i < cos_angles.rows; i++){
    for(int j = 0; j < cos_angles.cols; j++){
        cos_angles.at<double>(i, j) = std::cos(2 * angles.at<double>(i, j));
        sin_angles.at<double>(i, j) = std::sin(2 * angles.at<double>(i, j));
    }
}

关于c++ - OpenCV - 具有 filter2D 和双值的 gaussianKernel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522876/

相关文章:

c++ - 设计 : GraphicManager, TexturesPool,纹理

c++ - 在 C/C++ 中,如何声明指向返回指向 int 值数组指针的函数的指针?

c++ - AppleClang : Operator Overloading Compilation Error

python - 如何使用 OpenCV 直接读取 tarfile 对象

c++ - OpenCV 与 OpenWRT 交叉编译时出错

opencv - 什么是windows系统路径?-关于Devcpp Opencv

c++ - 使用 ifstream 在两个线程中处理同一个文件

.net - 将 .NET 命名空间导入到空的 Visual C++ 项目

c# - EMGU CV 视频作者无法制作视频

matlab - 按关键点方向删除错误匹配