在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 filter,并检查它是否正确,然后使用内核进行实验。
以下是使用示例:http://feelmare.blogspot.ru/2013/01/cvfilter2d-example-source-code-various.html
您还可以创建两个测试图像,一个带有水平线,另一个带有垂直线,应用过滤器并查看像素值。可以手动计算的正确值。然后验证在每种情况下是否正确。
相关文章:
- Cpp-Tuple使用带有变量的get
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 通过 get-Method 访问变量在类外不起作用
- 如何使用CImg打开图像?
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++中是否有任何函数等同于python中字典的get函数?
- 使用istringstearm和get行缓慢读取文件
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 使用 cin.get() 初始化字符数组
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- 编写 cin.get() 以接收字符数组时出现问题
- 作用域枚举和标准::get
- C++ Xcode 9 - 无法从 Cimg 调用函数 display()
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 使用"push_back"作为带有"get"函数C++的向量
- 使用 cin.get 读取字符数组
- 如何使用 fstream 的 .get 字符串?