Свертка в OpenCV С++

Я хочу выполнить свертку в 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);





}

person MerveMeriç    schedule 04.07.2014    source источник


Ответы (1)


Я предполагаю, что вы хотели бы вычислить горизонтальный градиент, верно? Поэтому вместо использования двумерного массива целых чисел в качестве ядра используйте объект cv::Mat (из документы: одноканальная матрица с плавающей запятой):

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.

person marol    schedule 04.07.2014
comment
Спасибо за ответ... Да, я пытаюсь сделать вертикальный и горизонтальный градиент. Должно ли ядроH =[1 0 -1] ? потому что мой источник показывает kernelH=[1 -1] или есть более одного ядра для получения градиента? - person MerveMeriç; 05.07.2014