Opencv感兴趣区域复制,画点,画线方法总结
2017-04-14 10:58
429 查看
今天做的东西用到了OpenCV的几个功能,下面对他们依次进行总结。
很容易想到用Opencv的ROI方法。
网上很多的总结方法都是用Opencv的C风格的代码,用的是IplImage,但是我用的是C++风格的,代码并不兼容,查了一段时间找到了解决方案,具体代码如下:
[cpp] view plain copy print?
void SIFTFeature::imageJoin(cv::Mat &src1, cv::Mat &src2, cv::Mat &dest) { cv::Rect roi1 = cv::Rect(0, 0, src1.cols, src1.rows); cv::Mat matchImage1 = dest(roi1); src1.convertTo(matchImage1, matchImage1.type()); cv::Rect roi2 = cv::Rect(src1.cols, 0, src2.cols, src2.rows); cv::Mat matchImage2 = dest(roi2); src2.convertTo(matchImage2, matchImage2.type()); }
首先选择一个感兴趣的矩形区域,然后选中目的图像的该部分区域,使用原图的converTo方法进行转换。
代码很简单,这里只做一个备份,估计下次还会忘。。。
结果如下:
这里的黄线是我做的SIFT特征匹配的结果,与图像拼接无关。
[cpp] view plain copy print?
cv::Point pointInterest;//特征点,用以画在图像中 pointInterest.x = keys[i][k].x;//特征点在图像中横坐标 pointInterest.y = keys[i][k].y;//特征点在图像中纵坐标 cv::circle(image, pointInterest, 2, cv::Scalar(0, 0, 255));//在图像中画出特征点,2是圆的半径
cv::Point start = cv::Point(x1, y1); cv::Point end = cv::Point(x2, y2); cv::line(image, start, end, cv::Scalar(0, 255, 255));
(1)Opencv对感兴趣区域的复制
具体是这样的,我想把两张图像进行拼接成一幅图像,很容易想象到的方法就是先创建一幅大的图像(高度为两张原图高度的较大者,宽度为两张原图宽度之和),然后把两张图像内容分别复制到这张大图的对应区域即可。很容易想到用Opencv的ROI方法。
网上很多的总结方法都是用Opencv的C风格的代码,用的是IplImage,但是我用的是C++风格的,代码并不兼容,查了一段时间找到了解决方案,具体代码如下:
[cpp] view plain copy print?
void SIFTFeature::imageJoin(cv::Mat &src1, cv::Mat &src2, cv::Mat &dest) { cv::Rect roi1 = cv::Rect(0, 0, src1.cols, src1.rows); cv::Mat matchImage1 = dest(roi1); src1.convertTo(matchImage1, matchImage1.type()); cv::Rect roi2 = cv::Rect(src1.cols, 0, src2.cols, src2.rows); cv::Mat matchImage2 = dest(roi2); src2.convertTo(matchImage2, matchImage2.type()); }
void SIFTFeature::imageJoin(cv::Mat &src1, cv::Mat &src2, cv::Mat &dest) { cv::Rect roi1 = cv::Rect(0, 0, src1.cols, src1.rows); cv::Mat matchImage1 = dest(roi1); src1.convertTo(matchImage1, matchImage1.type()); cv::Rect roi2 = cv::Rect(src1.cols, 0, src2.cols, src2.rows); cv::Mat matchImage2 = dest(roi2); src2.convertTo(matchImage2, matchImage2.type()); }这是我做的东西的其中一个函数,很显然,src1和src2是原图,dest是拼接好的大图。
首先选择一个感兴趣的矩形区域,然后选中目的图像的该部分区域,使用原图的converTo方法进行转换。
代码很简单,这里只做一个备份,估计下次还会忘。。。
结果如下:
这里的黄线是我做的SIFT特征匹配的结果,与图像拼接无关。
(2)Opencv画点
不多说,直接上代码,其实画的是小圆圈[cpp] view plain copy print?
cv::Point pointInterest;//特征点,用以画在图像中 pointInterest.x = keys[i][k].x;//特征点在图像中横坐标 pointInterest.y = keys[i][k].y;//特征点在图像中纵坐标 cv::circle(image, pointInterest, 2, cv::Scalar(0, 0, 255));//在图像中画出特征点,2是圆的半径
cv::Point pointInterest;//特征点,用以画在图像中 pointInterest.x = keys[i][k].x;//特征点在图像中横坐标 pointInterest.y = keys[i][k].y;//特征点在图像中纵坐标 cv::circle(image, pointInterest, 2, cv::Scalar(0, 0, 255));//在图像中画出特征点,2是圆的半径
(3)Opencv画线
[cpp] view plain copy print?cv::Point start = cv::Point(x1, y1); cv::Point end = cv::Point(x2, y2); cv::line(image, start, end, cv::Scalar(0, 255, 255));
cv::Point start = cv::Point(x1, y1); cv::Point end = cv::Point(x2, y2); cv::line(image, start, end, cv::Scalar(0, 255, 255));
相关文章推荐
- Opencv感兴趣区域复制,画点,画线方法总结
- opencv 提取感兴趣区域 (新版方法)
- opencv 复制图片的感兴趣区域
- Opencv 中 Mat中元素的值读取方法总结
- opencv学习-定义感兴趣区域
- OpenCV_复制一个或多个ROI图像区域
- opencv获取感兴趣区域函数
- OpenCV对图像获取像素值方法总结
- C++文件复制方法总结
- [OpenCV2]定义感兴趣的区域
- 总结系列_14(OpenCV2.4.3的新特征以及安装方法)
- OpenCV复制一个或多个ROI图像区域
- [转载]ubuntu 11.04安装OpenCV2.3方法总结
- OpenCV:设置图像的感兴趣区域(ROI)
- OpenCV设置感兴趣区域(roi)
- OpenCv 复制IplImage img中指定区域数据
- IOS:关于iPhone/iPad全屏截图与区域截图的几种方法总结
- 关于iPhone/iPad全屏截图与区域截图的几种方法总结
- OpenCV对感兴趣区域(ROI)的操作
- OpenCV中关于感兴趣的区域ROI