В opecv, как реализовать get_gradientXY CImg

В настоящее время я работаю над реализацией функции CImg, которая называется get_gradientXY, с использованием интерфейса OpenCV. И я обнаружил, что cvSobel в OpenCV может иметь тот же эффект, что и get_gradientXY, но после экспериментов с образцом графа выходной граф совершенно другой. Я застрял с этим.

Вот мой тестовый код:

imgCv.Load("1.jpg");
imgCimg.Load("1.jpg");

IplImage* pSrcImage = imgCv.GetOpenCVImpPtr();//get pointer of src graph
IplImage* grad_x = cvCreateImage(cvGetSize(pSrcImage), pSrcImage->depth, 3);
IplImage* grad_y = cvCreateImage(cvGetSize(pSrcImage), pSrcImage->depth, 3);
cvSobel(pSrcImage,grad_x,1,0,3);
cvSobel(pSrcImage,grad_y,0,1,3);

std::string filename1 = "gradcvx.jpg";
std::string filename2 = "gradcvy.jpg";
cvSaveImage(filename1.data(), grad_x);
cvSaveImage(filename2.data(), grad_y);
//*****cimg_library::CImgList<unsigned char> gradImages =  imgCimg.GetCImg().get_gradientXY(2);

gradImages[0].save("gradcimgx.jpg");
gradImages[1].save("gradcimgy.jpg");

И gradcvx.jpg совершенно отличается от gradcimgx.jpg.
Мне интересно, почему. Спасибо.

0

Решение

Вы можете попробовать реализовать фильтр Собела, используя функцию CvFilter2d, посмотреть, правильно ли он, и поэкспериментировать с ядром.

Вот пример использования: http://feelmare.blogspot.ru/2013/01/cvfilter2d-example-source-code-various.html

Вы также можете создать два тестовых изображения, одно с горизонтальными линиями, другое с вертикальными, применить фильтр и посмотреть значения пикселей. Правильные значения вы можете вычислить вручную. Затем проверьте, правильно ли это в каждом случае.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector