[英]Convolution in OpenCV C++
我想用cpp在opencv中卷积我的代码给出以下错误
错误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);
}
我假设您想计算水平梯度,对吗? 因此,不要使用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之前将彩色图像转换为灰度图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.