Convolução 2D usando openCV em C

Eu quero implementar um programa que executa a convolução 2D usando o openCV. Eu sou novo no openCV. minha implementação ingênua está aqui:

#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;
}

Eu sei que não está correto. alguém pode me ajudar a corrigir esta implementação? Eu também não consigo entender a âncora! Estudei e pesquisei muitos links, esses links podem ser úteis:Matrizes 2D com CvMat em OpenCV Referência estrutural do CvMat a implementação C do programa de convolução pode ser vista nesta pergunta:Convolução 2D rápida em C

eu usogcc, Linux mint eSkylake

O comando de construção égcc -Wall pkg-config --libs opencv pkg-config --cflags opencv -march=native -D _GNU_SOURCE -O2 -o "%e" "%f"

eu uso-D _GNU_SOURCE para atribuir o programa a um único núcleo da CPU. É correto restringir o openCV? Porque eu quero verificar o desempenho em um único núcleo.

ATUALIZAR O objetivo desta implementação é uma comparação entre a implementação do My Convolution com outra implementação rápida na CPU. Comparar o openCV é uma boa ideia? Se não, qual é o melhor caminho? Se sim, existem diferenças entre as versões C, C ++ e java para comparação? Quero dizer, meu programa básico está escrito em C. Faz algum sentido comparar o programa com C ++, que usag++ em vez degcc e, claro, objetos, etc.

questionAnswers(0)

yourAnswerToTheQuestion