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);
}
opencv cvPreCornerDetect的更多相关文章
- [OpenCV] IplImage and Functions
In this chapter, APIs will make U crazy. Good luck! Next, Review Linear Algebra. Ref: http://blog.c ...
- OpenCv结构和内容
OpenCv的结构和内容 OpenCv源码组成结构其中包括cv, cvauex, cxcore, highgui, ml这5个模块 CV:图像处理和视觉算法 MLL:统计分类器 HighGui:GUI ...
- [OpenCV] IplImage and Operation
IplImage 一.资源 In this chapter, APIs will make U crazy. Good luck! Next, Review Linear Algebra. Ref: ...
- 常用的OpenCV函数速查
常用的OpenCV函数速查 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4 ...
- OpenCV学习笔记四:ImgProc模块
一,简介 这个模块包含一系列的常用图像处理算法. 二,分析 此模块包含的文件如下图: 其导出算法包括如下: /*********************** Background statistics ...
- 常用的OpenCV 2.0函数速查
OpenCV 2.0函数释义列表 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像 ...
- opencv在图像显示中文
在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- opencv源码:cascadedetect
级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...
随机推荐
- 遇到的兼容性bug
1.(IE6):ie6环境下,通过设置z-index:999:无效果: 原因:IE6下,决定层级高低的不是当前的父标签,而是整个DOM tree(节点树)的第一个relative属性的父标签. 解决办 ...
- 概率编程:《贝叶斯方法概率编程与贝叶斯推断》中文PDF+英文PDF+代码
贝叶斯推理的方法非常自然和极其强大.然而,大多数图书讨论贝叶斯推理,依赖于非常复杂的数学分析和人工的例子,使没有强大数学背景的人无法接触.<贝叶斯方法概率编程与贝叶斯推断>从编程.计算的角 ...
- U-BOOT启动流程分析--start.s(二)
一.概述 u-boot的启动流程: 从文件层面上看主要流程是在两个文件中:cpu/arm920t/start.s,lib_arm/board.c, 先来分析start.s 在flash中执行的引 ...
- route---设置Linux内核中的网络路由表
route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现. 在L ...
- LinkedIn微服务框架rest.li
linkedin/rest.li https://github.com/linkedin/rest.li LinkedIn微服务框架rest.li摘要:Rest.li是一款REST+JSON框架,使 ...
- js中的this详解
在web前端开发中,javascript中的this和其他的JAVA,C#等大型语言一样,是一个重要概念.但是要注意的是,在javascript中,由于 javascript的动态性,this的指向在 ...
- c# Dictionary
Dictionary<string,string>是一个泛型 有集合的功能,也可以看成一个数组:结构是这样的Dictionary<[key],[value]> 存入的对象是需 ...
- 微信小程序,前端大梦想(二)
微信小程序之数据缓存实例-备忘录 数据缓存在移动端的使用是非常重要的,既可以减少用户的流量支出又可以提高程序的访问速度和用户体验.每个微信小程序都可以有自己的本地缓存,可以通过 wx.setS ...
- C/C++(函数)
函数 函数三要素:函数名,参数,返回值 重点研究函数的输入输出 随机数函数 //产生一组随机数 #include<stdio.h> #include<stdlib.h> #in ...
- LuoguP2764 最小路径覆盖问题(最大流)
题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开 ...