cv::drawMatches黑图和 cv::drawKeypoints出错

在做图相匹配对齐的时候,有可能看到匹配后的图像被扯得乱七八糟像旋涡,一样扭曲在一起。


从那一步就知道了肯定是匹配点算法有问题,导致匹配的时候用了错误的点,对齐的图像才被扯烂了。

通常的Debug的方法就是干脆把匹配的点在图上标出来看看有多少匹配错了不就好了? (ˉ▽ ̄~) 切~~

标注的方法有两个:cv::drawMatches 和 cv::drawKeypoints。  前一个能把两张图中的匹配点用线连起来给你看,第二个是能在一张图中画圈圈标注匹配点。


图片来自网络(ref,1)

现在问题来了:在使用两个方法的时候有可能出错。比如使用cv::drawMatches的时候,输出图像只有那几道线在一个纯黑色的背景上。或者用cv::drawKeypoints之后报错“incorrect type of input image”。

两种错误同源。是因为两个function不能应用于RGBA通道的cv::Mat (妈的这么大的问题官方竟然不提! (╯‵□′)╯︵┴─┴), 只能用于8UC3和8UC1的,也就是RGB和灰度图。而iphone手机拍的图像默认是8UC4的,也就是RGBA。

所以呢,如果你想绘制点的话,得先转换为RGB的图像,操作完之后再转回RGBA。

  cv::cvtColor(input, rgb, CV_RGBA2RGB);

  cv::drawKeypoints(imageMat, keypoints, outputMat);

  cv::cvtColor(rgb, output, CV_RGB2RGBA);

// 代码复制不顶用啊老哥,根据您自己的代码改变量

虽然麻烦,但是这样就能得到标记的画面了 o(* ̄▽ ̄*)o




ref:

http://mccormickml.com/2013/01/24/opencv-sift-tutorial/

https://groups.google.com/forum/#!topic/android-opencv/co9Zv9pon30

你可能感兴趣的:(cv::drawMatches黑图和 cv::drawKeypoints出错)