今天上午也是没有很大的成效,一直到下午睡醒(论好的睡眠的重要性),在一篇帖子中看到一种新的写法,opencv3将IplImage转换为Mat格式的写法,在我们的代码中采用这种方式,改到哪里哪里的问题就消失了,这种感觉非常爽!
写完整一点,记录准确以后参考。
我在机器人视觉检测中将kinect采集到的视频数据流进行特征提取和匹配,用的是成熟快速兼于一体的surf加速鲁棒特征进行匹配,这其中的一个方法是需要先将ros中的图像信息格式sensor::message/image通过cv_bridge转换为我们的Mat格式,之后需要将Mat格式再进一步转换为IplImage格式的图像,这是因为我们需要用到cvCreateImage()函数取出来图像的像素深度和图像通道信息,这一步只能对IplImage格式进行操作,需要对原图象进行深拷贝,转换操作完后,我们要不嫌麻烦地再将IplImage图像转换为Mat图像,之后就是愉快的送入到特征检测计算器中计算,detectAndCompute()需要的参数格式很严格,上述的转换格式的原因就是需要满足这样的参数格式,详细的注释都给出在代码中。
走了很多弯路,主要就是格式转换中的代码写的原因,版本不同有不同的写法,可能只有一种合适版本的写法可以编译成功。
看代码:
//beginging
Ptr<SURF> surf;
surf = SURF::create(800);
vector<KeyPoint>keypoint1, keypoint2;
frame = get_one_frame();
body_rect = client->