[zt] ROI (Region of Interest) 感興趣區域 OpenCV


在以前介紹IplImage結構的時候,有一個重要的參數——ROI。ROI全稱是”Region Of Interest”,即感興趣的區域。實際上,它是IPL/IPP(這兩個是Inter的庫)結構IplROI的實例。IplROI包含xOffset、yOffset、height、width和coi成員變量。其中COI代表channel of interest(感興趣的通道)。ROI的思想是:一旦設定ROI,通常組用於整幅圖像的函數便只會對ROI所表示的子圖像進行操作。如果COI被設置非0值,則對該圖像的操作就只作用於被指定的通道上了。這個COI變量可取的值是1、2、3、4通道,並且為了使COI無效而保留了0取值(有點像忽略)。但是,許多OpenCV函數都忽略參數COI。

ROI在實際工作中有很重要的作用,在許多情況下,使用它會提高計算機視覺代碼的執行速度。這是因為他們允許對圖像的某一部分進行操作,而不是對整個圖像進行操作。在OpenCV中,普遍支持ROI,函數的操作被限於感興趣的區域。要設置或取消ROI,就要使用 cvSetImageROI( )和cvResetImageROI( )函數。如果設置ROI,可以使用函數 cvSetImageROI( ),並為其傳遞一個圖像指針和矩形。要取消ROI,只需要為函數 cvResetImageROI( )傳遞一個圖像指針。

下面用一個例子來來說明ROI的用法。例子中:我們加載一幅圖像並修改一些區域——設置ROI的x,y,width和height的值,最后將ROI區域中像素都加上一個整數。代碼如下:

上述代碼把ROI集中於貓的臉部,並將其藍色通道增加150。最終效果如圖:

OpenCV學習筆記(5)——ROI - 第1張  | 時間軌跡

最后有兩點需要說明:

1. cvAddS( )函數,該函數用於實現一個數組和一個標量的元素級的相加運算。例子中通過cvScalar( )構造函數將CvScalar的第一個分量設置為add代表的值,其他值為默認值0,然后和src里面的元素相加。那為什么是藍色通道增加150,而不是紅色通道呢?因為RGB圖在內存中的排列順序是:BGRA BGRA BGRA …。所以,實際上第一個通道是B(blue)。該函數其實還有第四個參數(默認為NULL),其代表的含義可參考OpenCV文檔。

2. 顯示圖像之前的” cvResetImageROI(src); ”這一句代碼千萬不能少。如果沒有這行代碼,那接下去顯示圖像的時候,只會顯示ROI區域。因為前面已經說過,設置了ROI區域后,OpenCV的函數只會對ROI區域有效。注釋掉那一句后的程序運行結果如下所示:

OpenCV學習筆記(5)——ROI - 第2張  | 時間軌跡


免責聲明!

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



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