zoukankan      html  css  js  c++  java
  • opencv cvPreCornerDetect

    关于OpenCv中cvPreCornerDetect 运行出错解决方法

    http://m.blog.csdn.net/blog/wode0239

    由于书本上示例的不全,相信大家在做的时候,肯定是无从下手。

    而且就算做了,会遇到各种错误。

    我也是初学,也遇到各种Exception。

    相信大家遇到的问题就是如何将load的image转换为32FC1

    我花了一个晚上,终于功夫不负有心人,终于解决这个问题了。

     

    我们知道由于cvPreCornerDetect 接收的参数,只能是浮点型的单通道图像

    而我们load进来的图像,默认是char 类型的3通道的图像,那么到底如何转换呢

    转换图像有两个方法,一个是cvConvert或者cvConvertScale ,另一个是cvCvtColor.

    根据我的测试,得到如下结果

     

    //单纯的使用cvConvertScale(image,temp);,只能转换相同通道不同值深度的图像

    //然后在使用cvCvtColor(temp,out,CV_RGB2GRAY); 这个函数也只能转换相同深度,不同通道的图像

     

    所以我们要结合使用才能将我们传入的8UC3转为32FC1

     

    下面直接看代码吧

    这是我经过测试的函数,可以运行,并出图像

    //计算用于角点检测的特征图,大家只需要在main里,调用,并将图像指针传入。运行,即可得到结果

     

    void doPreCornerDetect(IplImage* image)

    {

    IplImage* temp = cvCreateImage(cvGetSize(image),IPL_DEPTH_32F,3);

    //由于cvPreCornerDetect只接收 32FC1图像,所以应该讲传入的image转换

    //单纯的使用cvConvertScale(image,temp);,只能转换相同通道不同值深度的图像

    //然后在使用cvCvtColor(temp,out,CV_RGB2GRAY); 这个函数也只能转换相同深度,不同通道的图像

     

    cvConvertScale(image,temp);

    IplImage* out = cvCreateImage(cvGetSize(temp),IPL_DEPTH_32F,1);

    cvCvtColor(temp,out,CV_RGB2GRAY);

    IplImage* corners = cvCloneImage(out);

     

    /*IplImage* dilated_corners = cvCloneImage(temp);

    IplImage* corner_mask = cvCreateImage( cvGetSize(temp), 8, 1 );*/

    cvPreCornerDetect( out, corners, 3 );

    // 扩张

    /*cvDilate( corners, dilated_corners, 0, 1 );

    cvSub( corners, dilated_corners, corners );

    cvCmpS( corners, 0, corner_mask, CV_CMP_GE );*/

     

    cvNamedWindow("PreCornerDetect");

    cvShowImage("PreCornerDetect",corners);

    cvWaitKey(0);

     

    cvReleaseImage( &out );

    cvReleaseImage( &corners );

    //cvReleaseImage( &dilated_corners );

    cvReleaseImage(&temp);

    }

  • 相关阅读:
    推荐下自己的开源框架:DataMapFramework
    真的能无师自通吗?JAVA学习指导系列
    再回首,工作的第一个十年
    2个DataSet中的数据传递问题,请高手们多多指教。
    数据结构小结
    CDQZ_Training 2012524 词编码
    PowerDesigner显示Comment注释
    DDD基本元素
    使用FluorineFx.NET更新FMS中的SharedObject
    如何取消页面缓存
  • 原文地址:https://www.cnblogs.com/gosteps/p/3416192.html
Copyright © 2011-2022 走看看