opencv harris角点检测

//cvCornerHarris 角点提取 精度低
//cvCornerHarris函数检测的结果实际上是一幅包含Harris角点的浮点型单通道图像如果要计算Harris角点列表,需要使用

cvGoodFeatureToTrack函数,并传递适当的参数。
 
#include "cv.h"
#include "highgui.h"
#include "iostream"
using namespace std;
int main(int argc,char** argv)
{
     IplImage* pImg;
     IplImage* pHarrisImg;
     IplImage* grayImage;
     IplImage* dst8;
     double minVal=0.0, maxVal=0.0;
     double scale, shift;
     double min=0, max=255;
 
    //载入图像
    if((pImg=cvLoadImage("D:\\03.jpg",1))!=NULL)
     {
         cvNamedWindow("source",1);
         cvShowImage("source",pImg);
        
          pHarrisImg=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_32F,1); //IPL_DEPTH_32F - 单精度浮点数
//there we should define IPL_DEPTH_32F rather than IPL_DEPTH_8U, 必须是32F 不能为8U否则运行不出来
        
         grayImage=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);

         dst8=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);//this is for the result image 输出图像

         grayImage->origin=pImg->origin;  //there make sure the same  origin between grayImage and pImg

         cvCvtColor(pImg,grayImage,CV_BGR2GRAY);//cause harris need gray scale image,we should convert RGB 2 gray ) 彩色图转换

为灰度图

         int block_size=7;
         //do harris algorithm     做harris算法
         cvCornerHarris(grayImage,pHarrisImg,block_size,3,0.04);  //cvCornerHarris函数检测的结果实际上是一幅包含Harris角点的浮

点型单通道图像如果要计算Harris角点列表,需要使用cvGoodFeatureToTrack函数,并传递适当的参数。
 
         //convert scale so that we see the clear image
         cvMinMaxLoc(pHarrisImg,&minVal,&maxVal,NULL,NULL,0);
         // cvMinMaxLoc()找出图片或一组数据中最大值及最小值的数据,以及最大值及最小值的位置
          cout<<minVal<<endl;
          cout<<maxVal<<endl;

         scale=(max-min)/(maxVal-minVal);
         shift=-minVal*scale+min;

         cvConvertScale(pHarrisImg,dst8,scale,shift);//使用线性变换转换数组,先对输入数组的元素进行比例缩放,然后将shift加到比例

缩放后得到的各元素上,即: dst(I)=src(I)*scale + (shift,shift,...),最后可选的类型转换将结果拷贝到输出数组

         cvNamedWindow("Harris",0);
         cvShowImage("Harris",dst8);
         cvWaitKey(0);
         cvDestroyWindow("source");
         cvDestroyWindow("Harris");
         cvReleaseImage(&dst8);
         cvReleaseImage(&pHarrisImg);
         return 0;
     }
     return 1;
}

原图:

 

 

实验结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

azoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值