OpenCV C ++中的卷积

时间:2014-07-04 13:52:47

标签: c++ opencv convolution

我想在opencv中使用cpp进行卷积我的代码会给出错误

错误C2040:'H':'int [1] [2]'与'cv :: Mat'的间接等级不同

我想在H = [1,-1]和图像||之间进行转换V = [1; -1]和图像

#include <iostream>
#include <opencv2\opencv.hpp>

using namespace std;
using namespace cv;

void main(){

    Mat image =imread("C:\\Users\\merve\\Desktop\\images3.jpg",CV_LOAD_IMAGE_COLOR);

    int h,w;



    Size s=image.size();
    h = s.height;
    w = s.width;

    int i,j;
    Mat H_gradient;

    int H [1][2] = {1,-1};
    int V [2][1] = {{1},{-1}};


    filter2D( image, H_gradient, -1 , H, Point( -1, -1 ), 0, BORDER_DEFAULT );

    namedWindow( "filter2D Demo", CV_WINDOW_AUTOSIZE );
    imshow( "filter2D Demo", H_gradient );





    waitKey(0);





}

1 个答案:

答案 0 :(得分:3)

我假设您想计算水平渐变,对吗?因此,不要使用int的二维数组作为内核,而是使用cv :: Mat对象(来自docs单通道浮点矩阵):

cv::Mat kernelH(1, 3, CV_32F);
kernelH.at<float>(0,0) = 1.0f;
kernelH.at<float>(0,1) = 0.0f;
kernelH.at<float>(0,2) = -1.0f;

并在代码中使用它代替H变量。类似地,要计算垂直渐变,请尝试以下代码段:

cv::Mat kernelH(3, 1, CV_32F);
kernelH.at<float>(0,0) = 1.0f;
kernelH.at<float>(1,0) = 0.0f;
kernelH.at<float>(2,0) = -1.0f;

另外,请记住在应用filter2d之前将彩色图像转换为灰度。