opencv取圖像一部分,取圖像局部,圖像局部互換

取圖像局部保存成一個圖像,或者將圖像局部和另一個圖像互換應用比較廣。

主要用到的函數是rect

1.取圖像局部保存

Rect rectL(0, 0, 15,20);
Mat img_now = img(rectL);

取圖像img的左上角,寬15像素,高20像素的圖像,生成新圖像img_now
Rect的定義

 Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height);

2.圖像局部互換

聲明一下,我的方法不是最優方法,但是能用
我們想把一副圖像的中間部位保留,其他部位變成0,也就是無數據(和局部互換思想一致)
1.生成一個和原圖像大小一致的純黑色矩陣

Mat CCL = Image.clone();
Mat CC = CCL.clone() * 0;

這裏用了.clone(),爲得不讓CCL變,影響到image,如果直接CCL = image會造成CCL指向image的地址,對CCL操作將會影響image。

2.將Mat格式圖像轉換爲IplImage*的形式,便於ROI操作

IplImage* ipl_imgL;
ipl_imgL = &CCL.operator IplImage();

IplImage* ipl_imgC;
ipl_imgC = &CC.operator IplImage();

3.構建rect框

Rect roi = Rect(0, round(CCL.rows / 4), CCL.cols, round(CCL.rows / 2));
Rect roi1 = Rect(0, round(CCL.rows / 4), CCL.cols, round(CCL.rows / 2));

4.設置ROI

cvSetImageROI(ipl_imgL, roi);
cvSetImageROI(ipl_imgC, roi1);

5.將設置好ROI的圖像拷貝操作並重設

cvCopy(ipl_imgL, ipl_imgC);
cvResetImageROI(ipl_imgC);

6.將IplImage*轉換會Mat

Mat src_color1(ipl_imgC);
src_color = src_color1.clone();

ROI Region Of Interest的縮寫,圖像處理中的術語“感興趣區”。設置圖像的ROI便是設置要處理的圖像中需要提取的區域。

IplImage*爲opencv2.1之前使用的圖像表達結果,Mat爲之後改版的結構,這裏二郎並不清楚ROI爲什麼在直接操作Mat時會出現問題,希望懂的學者可以在下方留言賜教,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章