Свертка в переполнении стека 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);
}

0

Решение

Я предполагаю, что вы хотели бы вычислить горизонтальный градиент, верно? Поэтому вместо использования двумерного массива целых в качестве ядра, используйте объект 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.

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector