[轉]Opencv 圖片ROI與圖片融合


Opencv 圖片ROI與圖片融合  

轉:http://klqulei23.blog.163.com/blog/static/1323153372013102021740641/

addWeighted : http://blog.csdn.net/gujiligujili/article/details/7650523 
 
 背景:做項目時候導師希望設置圖像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沒有變化):
Opencv 圖片ROI與圖片融合 - 小影不愛睡 - 影 的博客
 

roiImage=srcImage(rect);

的結果如下(由於公有內存,所以原圖srcImage也變化):
Opencv 圖片ROI與圖片融合 - 小影不愛睡 - 影 的博客
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM