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), 不然会出现运行时异常。
新闻热点
疑难解答