Opencv 图片ROI与图片融合
2014-03-03 13:39
387 查看
背景:做项目时候导师希望设置图像ROI,然后将处理的结果合并到原图像上,这里面有两个问题
(1)如何ROI(2)如何融合不说别的,上代码:#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//namedWindow("main");
Mat srcImage = imread("../opencv_ROI_test/test.jpg");
Mat intrImage= imread("../opencv_ROI_test/2x2.png");
// 保存一个ROI图像区域
cv::Mat roiImage;
cv::Rect rect(0, 0, intrImage.cols, intrImage.rows);
//srcImage(rect).copyTo(roiImage);//重新分配内存,如果矩阵roiImage的大小或数据类型与srcImage(rect)不一样,那么在copyTo函数内部会先给imageROI重新分配内存
roiImage=srcImage(rect);//不重新分配内存,公用内存
cv::addWeighted(roiImage,1.0,intrImage,0.3,0.,roiImage); //intrImage(rect).copyTo(srcImage(rect));
cv::imshow("main", srcImage);
cv::imshow("roi", roiImage);
cv::imshow("intr", intrImage);
cv::waitKey(0);
return 0;
}这里有必要说一下:
//srcImage(rect).copyTo(roiImage);//重新分配内存,如果矩阵roiImage的大小或数据类型与srcImage(rect)不一样,那么在copyTo函数内部会先给imageROI重新分配内存
roiImage=srcImage(rect);//不重新分配内存,公用内存主要是区别一下上面两行的不同,前者是重新分配内存(copyTo不一定重新分配内存哦!一定要注意,因为在复杂的程序中这影响释放内存问题),后者一定是公用内存!srcImage(rect).copyTo(roiImage);的结果如下(由于重新分配内存,所以原图srcImage没有变化):
roiImage=srcImage(rect);的结果如下(由于公有内存,所以原图srcImage也变化):
(1)如何ROI(2)如何融合不说别的,上代码:#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//namedWindow("main");
Mat srcImage = imread("../opencv_ROI_test/test.jpg");
Mat intrImage= imread("../opencv_ROI_test/2x2.png");
// 保存一个ROI图像区域
cv::Mat roiImage;
cv::Rect rect(0, 0, intrImage.cols, intrImage.rows);
//srcImage(rect).copyTo(roiImage);//重新分配内存,如果矩阵roiImage的大小或数据类型与srcImage(rect)不一样,那么在copyTo函数内部会先给imageROI重新分配内存
roiImage=srcImage(rect);//不重新分配内存,公用内存
cv::addWeighted(roiImage,1.0,intrImage,0.3,0.,roiImage); //intrImage(rect).copyTo(srcImage(rect));
cv::imshow("main", srcImage);
cv::imshow("roi", roiImage);
cv::imshow("intr", intrImage);
cv::waitKey(0);
return 0;
}这里有必要说一下:
//srcImage(rect).copyTo(roiImage);//重新分配内存,如果矩阵roiImage的大小或数据类型与srcImage(rect)不一样,那么在copyTo函数内部会先给imageROI重新分配内存
roiImage=srcImage(rect);//不重新分配内存,公用内存主要是区别一下上面两行的不同,前者是重新分配内存(copyTo不一定重新分配内存哦!一定要注意,因为在复杂的程序中这影响释放内存问题),后者一定是公用内存!srcImage(rect).copyTo(roiImage);的结果如下(由于重新分配内存,所以原图srcImage没有变化):
roiImage=srcImage(rect);的结果如下(由于公有内存,所以原图srcImage也变化):
相关文章推荐
- [转]Opencv 图片ROI与图片融合
- qt+opencv对两幅图片进行融合
- opencv2读取视频提取ROI区域并把ROI区域保存为图片
- opencv3_java 图片的ROI的领域合成 AddRoi
- OpenCV学习-利用ROI裁剪图片
- opencv 图片融合
- opencv日常学习之给ROI,以及给图片加水印
- opencv从零开始——2. ROI与线性融合
- OpenCV编程->ROI区域保存为图片
- OpenCV SIFT/SURF图片拼接融合
- OpenCV编程->ROI区域保存为图片
- opencv实现两幅图片的加权融合
- 【opencv练习09 - 图片线性加权融合】
- opencv 图片基本处理(灰度化,反色,二值化,膨胀腐蚀以及ROI的copy等)
- OpenCV学习笔记_图片融合cvAddWeighted
- Opencv 例程讲解 6 ---- 图片融合 addWeighted到底有多快?
- 【Python_Demo_4】 利用OpenCv的ROI区域,将衣服图片切成规则的小图片的python程序
- OpenCV分通道显示图片,灰度,融合,直方图,彩色直方图
- qt+opencv对两幅图片进行融合
- opencv中替换图片ROI矩形区域的方法