栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

视觉伺服控制工具Visual Servoing Platform---VISP(2)----使用ViSP滤波图像。

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

视觉伺服控制工具Visual Servoing Platform---VISP(2)----使用ViSP滤波图像。

在本教程中,您将学习如何使用vpImageFilter类中实现的ViSP过滤函数。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
void display(vpImage &I, const std::string &title);
void display(vpImage &D, const std::string &title);
void display(vpImage &I, const std::string &title)
{
#if defined(VISP_HAVE_X11)
  vpDisplayX d(I);
#elif defined(VISP_HAVE_OPENCV)
  vpDisplayOpenCV d(I);
#elif defined(VISP_HAVE_GTK)
  vpDisplayGTK d(I);
#elif defined(VISP_HAVE_GDI)
  vpDisplayGDI d(I);
#elif defined(VISP_HAVE_D3D9)
  vpDisplayD3d d(I);
#else
  std::cout << "No image viewer is available..." << std::endl;
#endif
  vpDisplay::setTitle(I, title.c_str());
  vpDisplay::display(I);
  vpDisplay::displayCharString(I, 15,15, "Click to continue...", vpColor::red);
  vpDisplay::flush(I);
  vpDisplay::getClick(I);
}
void display(vpImage &D, const std::string &title)
{
  vpImage I; // Image to display
  vpImageConvert::convert(D, I);
  display(I, title);
}
int main(int argc, char** argv )
{
  try {
    if(argc != 2) {
      printf( "Usage: %s n", argv[0] );
      return -1;
    }
    vpImage I;
    try {
      vpImageIo::read(I, argv[1]);
    }
    catch(...) {
      std::cout << "Cannot read image "" << argv[1] << """ << std::endl;
      return -1;
    }
    display(I, "Original image");
    vpImage F;
    vpImageFilter::gaussianBlur(I, F);
    display(F, "Blur (default)");
    vpImageFilter::gaussianBlur(I, F, 7, 2);
    display(F, "Blur (var=2)");
    vpImage dIx;
    vpImageFilter::getGradX(I, dIx);
    display(dIx, "Gradient dIx");
    vpImage dIy;
    vpImageFilter::getGradY(I, dIy);
    display(dIy, "Gradient dIy");
#if (VISP_HAVE_OPENCV_VERSION >= 0x020100)
    vpImage C;
    vpImageFilter::canny(I, C, 5, 15, 3);
    display(C, "Canny");
#endif
    vpMatrix K(3,3); // Sobel kernel along x
    K[0][0] = 1; K[0][1] = 0; K[0][2] = -1;
    K[1][0] = 2; K[1][1] = 0; K[1][2] = -2;
    K[2][0] = 1; K[2][1] = 0; K[2][2] = -1;
    vpImage Gx;
    vpImageFilter::filter(I, Gx, K);
    display(Gx, "Sobel x");
    size_t nlevel = 3;
    std::vector< vpImage > pyr(nlevel);
    pyr[0] = I;
    for (size_t i=1; i < nlevel; i++) {
      vpImageFilter::getGaussPyramidal(pyr[i-1], pyr[i]);
      display(pyr[i], "Pyramid");
    }
    return 0;
  }
  catch(vpException &e) {
    std::cout << "Catch an exception: " << e << std::endl;
    return 1;
  }
}

首先是原始图像

Gaussian blur

C
Gradients computation

Canny edge detector

Convolution

Gaussian image pyramid

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/699005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号