Region of Interest(ROI)
阿新 • • 發佈:2018-03-18
desktop top div rec har ret argc info style
創建一個ROI Mat,包含 50 X 50像素,起點(25,25)
Mat roi(image, Rect(25, 25, 50, 50));
在表征Mat的範圍的時候,順序是 row 然後是 col (先高後寬)。若使用此方法獲取ROI,那麽在ROI上的操作將直接作用到原圖像上。創建的ROI並沒有做一個深度copy,如果想要一個真正的copy,使用clone函數
Mat imageCopy = image.clone();
如果想要把感興趣區域高亮一下,用這樣的騷操作
Mat roi(image, Rect(500, 138, 65, 65)); roi = Scalar(0);
這樣你的roi就成了一塊兒黑炭了。
這裏給出一個在圖像上放置一個黑色十字的例子
#include <QCoreApplication> #include "opencv2/opencv.hpp" using namespace cv; void crossTrape(Mat &rSrcImage); int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Mat srcImage = imread("c:/users/administrator/desktop/cat.jpg"); crossTrape(srcImage); imshow("output", srcImage); return a.exec(); } void crossTrape(Mat &rSrcImage) { Mat centralCols = rSrcImage.colRange(rSrcImage.cols / 2 - 10, rSrcImage.cols / 2 + 10); Mat centralRows = rSrcImage.rowRange(rSrcImage.rows / 2 - 10, rSrcImage.rows / 2 + 10); centralCols = Scalar(0); centralRows= Scalar(0); }
效果圖
遍歷所有像素,整體增亮函數:
void darker(Mat &rSrcImage) { for(int i = 0; i < rSrcImage.rows; i++) { for(int j = 0; j < rSrcImage.cols; j++) { rSrcImage.at<Vec3b>(i, j) = rSrcImage.at<Vec3b>(i, j) * 1.2; } } }
效果可以說是很明顯了。
OpenCV 提供了一種更加便捷的遍歷像素的方法,以後再補充吧,忒難了。
Region of Interest(ROI)