src(Rect(100, 0, 300, 300))
即可實現,原理是什么呢?通過讀API發現,Mat類定義中,對括號運算符進行了重載Mat cv::Mat::Operator() (const Rect & roi) const;通過 cv::Rect()
函數指定ROI區域范圍,返回Mat型ROI,注意,這里的ROI是引用值,如果原圖像被修改,ROI會隨之而變。 除此之外,還可以通過Range類來指定ROI區域,用法與上類似。
Range類是OpenCV中的抽象數據類,表示連續數據的起始位置,可以理解為,Range=[star,end];
cv::addWeighted()
函數來實現,其定義為:void cv::addWeighted( InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1 ) 其中,InputArray和OutputArray是OpenCV提供的強大的接口類,兼容Mat類型,因此,在這里,可以當做Mat類型進行處理。
alpha和beta分別是輸入圖像對應的權重,均為double型,而gamma是混合圖像相加的標量,該過程計算如下:
dst(I)=saturate(src1(I)?alpha+src2(I)?beta+gamma)I表示圖像,gamma是通過+的運算符重載,加到每一個像素點上。
注意,輸入的圖像必須具有相同的圖像尺寸(rows和cols)和深度(depth和channels), 不然會出現運行時異常。
新聞熱點
疑難解答