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.