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( ...
随机推荐
- DevExpress Report打印边距越界问题
DevExpress Report Print的时候,出现这样的问题:one or more margins are set outside the printable area of the pa ...
- 技嘉H81M-DS2 主板安装 XP方法,及网卡驱动安装
这是微软联合厂家封杀XP的结果,目的很简单,微软只想把你驱赶到WIN7.WIN8上去. 16.7.18 技嘉H81M-S1, G3260 安装XP系统 *BIOS 修改 Storage Boot Op ...
- 如何在Ubuntu14.04中安装mysql
接触过MySQL的小伙伴们都知道,在Windows下安装MySQL是一件让人十分头大的事情,但是在Ubuntu等其他Linux系统中安装MySQL就简单很多了,具体的教程如下.1.在Ubuntu的命令 ...
- js sort()函数 排序问题 var arr =['A-1-5-1','A-1-10-2','A-1-5-5','B-2-3-1','C-4-10-1'], 对这个数组进行排序,想达到的效果是["A-1-5-1", "A-1-5-5", "A-4-10-1", "A-1-10-2", "A-2-3-1"]
先介绍个方法 charCodeAt() 方法可返回指定位置的字符的 Unicode 编码.这个返回值是 0 - 65535 之间的整数. stringObject.charCodeAt(index) ...
- Windows IP 设置脚本
前言: 有时候,总要在不同地方工作,就会总要切换 IP,内网比较严重,内网大多数都是静态 IP 所以呢,老是手动去设置 IP.子网掩码.网关等甚是繁琐,同时还得记住 IP,所以呢,用脚本来记录 IP, ...
- mysql InnoDB加锁分析
文章转载自:http://www.fanyilun.me/2017/04/20/MySQL%E5%8A%A0%E9%94%81%E5%88%86%E6%9E%90/ 以下实验数据基于MySQL 5.7 ...
- 【hdu 1429】胜利大逃亡(续)
[Link]: [Description] 给你一个n*m的格子; 里面有钥匙,以及钥匙能开的门; 以及墙,以及起点,以及出口; 问你从起点出发,到出口的话,能不能在t时间内到; [Solution] ...
- 洛谷——P1518 两只塔姆沃斯牛 The Tamworth Two
https://www.luogu.org/problem/show?pid=1518 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为( ...
- 洛谷——P1043 数字游戏
https://www.luogu.org/problem/show?pid=1043 题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要 ...
- 利用HTTP代理录制Jmeter脚本
1 測试计划中加入一个线程组1 2在"工作台"-非測试元件-加入"HTTP代理server" port: 代理server的port,默认8080,可自行改动, ...