在C中使用openCV的2D卷积

我想实现一个使用openCV执行2D卷积的程序。 我是openCV的新手。 我天真的实现在这里:

#include  #include  //used for kernel unsigned short int kernel[3][3] __attribute__(( aligned(32))); // input and output image unsigned short int input[512][512] __attribute__(( aligned(32))); unsigned short int output[512][512] __attribute__((aligned(32))); int main() { //data are assigned to input and kernel matrices before. const CvArr* src = input; CvArr* dst = output; const CvMat* kernel = kernel; // return error incompatible pointer type CvPoint anchor=cvPoint(-1,-1); // ? cvFilter2D(src, dst, kernel, anchor); // want to multiply the kernel as it should do in 2D convolution program return 0; } 

我知道这不对。 任何人都可以帮我纠正这个实现吗? 我也无法理解主播! 我研究和搜索了许多链接,这些链接可能会有所帮助: 在OpenCV中使用CvMat的2D矩阵 CvMat Struct Reference在这个问题中可以看到卷积程序的C实现: C中的快速2D卷积

我使用gccLinux mintSkylake

构建命令是gcc -Wall pkg-config --libs opencv pkg-config --cflags opencv -march=native -D _GNU_SOURCE -O2 -o "%e" "%f"

我使用-D _GNU_SOURCE将程序分配给CPU的单个核心。 限制openCV是否正确? 因为我想检查单核上的性能。

更新此实现的目标是将My Convolution实现与CPU上的另一个快速实现进行比较。 比较openCV是一个好主意吗? 如果不是最好的方法是什么? 如果是,那么C,C ++和Java版本之间是否有任何差异可供比较? 我的意思是我的基本程序是用C语言编写的,将程序与使用g++而不是gcc C ++进行比较是有意义的,当然还有对象等。