在C

时间:2017-03-23 21:42:17

标签: c opencv convolution

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

#include <stdio.h>
#include <cv.h>
//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;
}

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

我使用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是否正确?因为我想检查单核上的性能。

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

0 个答案:

没有答案