Я пытаюсь реализовать программу 2d свертки в C ++, используя opencv. Я добавил границу с ядром в качестве входных данных, но когда я запускаю свой код, я понимаю, что в изображения не было внесено никаких изменений, я чувствую, что все сделал правильно.
Может ли кто-нибудь мне помочь?
2d_filter(const Mat &input, Mat &output, const Mat &kernel) {
Mat in_out = (Mat_<float>(3,3));
int border = 1;
Mat copy_out ;
cv::copyMakeBorder(kernel, in_out, border, border,border,border, cv::BORDER_REPLICATE);
for(int y=0; y < copy_out.rows; ++y)
{
for(int x=0; x < copy_out.cols; ++x)
{
for(int ky=0; ky < kernel.rows; y++)
{
float tmp = 0.0f;
for(int kx=0; kx < kernel.cols; kx++)
{
tmp = in_out.at<float>(((y+ky-((kernel.rows-1)/2))),x+kx-((kernel.cols-1)/2))*kernel.at<float>(ky,kx);
}
copy_out.at<float>(y,x) =tmp;
}
}
}
copy_out.copyTo(output);