簡體   English   中英

在opecv中,如何實現CImg的get_gradientXY

[英]In opecv, how to implement get_gradientXY of CImg

我目前正在使用OpenCV的接口實現CImg的功能,即get_gradientXY。 而且我發現OpenCV中的cvSobel可能具有與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完全不同。 我想知道為什么。 謝謝。

您可以嘗試使用CvFilter2d函數實現Sobel過濾器,看看它是否正確,然后嘗試使用內核。

這是用法示例: http : //feelmare.blogspot.ru/2013/01/cvfilter2d-example-source-code-various.html

您還可以創建兩個測試圖像,一個帶有水平線,另一個帶有垂直線,應用濾鏡並查看像素值。 您可以手動計算的正確值。 然后驗證在每種情況下是否正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM