2014-07-04 119 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]或者是否有多個內核用於獲取漸變? –