opencv放射warpAffine函数和getRotationMatrix2D函数

网友投稿 999 2022-09-27

opencv放射warpAffine函数和getRotationMatrix2D函数

opencv放射warpAffine函数和getRotationMatrix2D函数



int main(int argc, char** argv) { Mat src = imread("test1.jpg", 1); //定义两组点,代表两个三角形 Point2f srcTriangle[3]; Point2f dstTriangle[3]; Mat rotMat(2, 3, CV_32FC1); Mat warpMat(2, 3, CV_32FC1); Mat src1, src2, src3; // 设置目标图像的大小和类型与源图像一致 src1 = Mat::zeros(src.rows, src.cols, src.type()); //设置源图像和目标图像上的三组点以计算仿射变换 srcTriangle[0] = Point2f(0, 0); srcTriangle[1] = Point2f(static_cast(src.cols - 1), 0); srcTriangle[2] = Point2f(0, static_cast(src.rows - 1)); dstTriangle[0] = Point2f(static_cast(src.cols*0.0), static_cast(src.rows*0.33)); dstTriangle[1] = Point2f(static_cast(src.cols*0.65), static_cast(src.rows*0.35)); dstTriangle[2] = Point2f(static_cast(src.cols*0.15), static_cast(src.rows*0.6)); //求得仿射变换 warpMat = getAffineTransform(srcTriangle, dstTriangle); //对源图像应用刚刚求得的仿射变换 warpAffine(src, src1, warpMat, src1.size()); //对图像进行缩放后再旋转 // 计算绕图像中点顺时针旋转50度缩放因子为0.6的旋转矩阵 Point center = Point(src1.cols / 2, src1.rows / 2); double angle = -30.0; double scale = 0.8; // 通过上面的旋转细节信息求得旋转矩阵 rotMat = getRotationMatrix2D(center, angle, scale); // 旋转已缩放后的图像 warpAffine(src1, src2, rotMat, src1.size()); imshow("效果图", src1); waitKey(3000); imshow("效果图", src2); waitKey(3000); return(0); }

C++: Mat getRotationMatrix2D(Point2fcenter, double angle, double scale)

第一个参数,Point2f类型的center,表示源图像的旋转中心。

第二个参数,double类型的angle,旋转角度。角度为正值表示向逆时针旋转(坐标原点是左上角)。第三个参数,double类型的scale,缩放系数。C++: void warpAffine(InputArray src,OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, intborderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,需和源图片有一样的尺寸和类型。第三个参数,InputArray类型的M,2×3的变换矩阵。第四个参数,Size类型的dsize,表示输出图像的尺寸。第五个参数,int类型的flags,插值方法的标识符。此参数有默认值INTER_LINEAR(线性插值),可选的插值方式如下:

INTER_NEAREST - 最近邻插值INTER_LINEAR - 线性插值(默认值)INTER_AREA - 区域插值INTER_CUBIC –三次样条插值INTER_LANCZOS4 -Lanczos插值CV_WARP_FILL_OUTLIERS - 填充所有输出图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval.CV_WARP_INVERSE_MAP –表示M为输出图像到输入图像的反变换,即 。因此可以直接用来做象素插值。否则, warpAffine函数从M矩阵得到反变换。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:QTableView改变单元格文字方向
下一篇:Springboot项目中内嵌sqlite数据库的配置流程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~