c++ - 在 OpenCV C++ 中,卷积

  显示原文与译文双语对照的内容
0 0

我想在opencv中使用 cpp convolution代码给出下面的错误

错误 C2040:'h':'int [1] [2]'与'cv::'的间接寻址级别不同

我想在 H= [1,-1] 和图像 || V= [1;-1] 和图像之间进行转换

#include <iostream>
#include <opencv2opencv.hpp>
using namespace std;
using namespace cv;
void main(){
 Mat image =imread("C:UsersmerveDesktopimages3.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 0

假设你想计算水平梯度,对吧? 因此,使用 cv::Mat 对象( 来自文档 ),而不是使用int作为内核的二维 array: 一个单一通道浮点矩阵 ):

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;

而在你的代码中使用它代替 varieble 。 类似地,要计算垂直渐变,请尝试以下代码段:

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之前将彩色图像转换为灰度。

原作者:
...