2013-08-16 3 views
0

현재 OpenCV의 인터페이스를 사용하여 get_gradientXY 인 CImg의 기능을 구현하고 있습니다. 그리고 OpenCV의 cvSobel은 get_gradientXY와 동일한 효과가있을 수 있지만 샘플 그래프를 실험 한 결과 출력 그래프는 완전히 다릅니다. 나는 이것에 붙어있다.opecv에서 CImg의 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 함수를 사용하여 Sobel 필터를 구현하고 올바른지 살펴보고 커널을 시험해 볼 수 있습니다. 여기

은 사용 예입니다 http://feelmare.blogspot.ru/2013/01/cvfilter2d-example-source-code-various.html

또한, 두 개의 테스트 이미지, 수직 다른 수평 라인을 만드는 필터를 적용하고 픽셀 값을 볼 수 있습니다. 손으로 계산할 수있는 정확한 값. 그런 다음 각각의 경우에 올바른지 확인하십시오.