2014-07-04 84 views
0

我想利用卷积与CPP OpenCV的我的代码给出低于卷积在OpenCV中C++

错误C2040错误: 'H': 'INT [1] [2]' 中的间接水平不同从'cv :: Mat'

我想在H = [1,-1]和image || 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); 





} 

回答

3

我假设你想计算水平渐变,对吧?因此,不是使用int的二维阵列作为内核,使用CV ::垫对象(从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; 

和使用它代替ħ可变您的码。类似的,计算垂直梯度,试试下面的代码片段:

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之前灰度。

+0

感谢您的回复...是的,我正在尝试做垂直和水平渐变。必须kernelH = [1 0 -1]?因为我的源代码显示kernelH = [1 -1]或者是否有多个内核用于获取渐变? –