高考考试网
当前位置: 首页 高考资讯

opencv旋转图像(JavaOpenCV图像旋转)

时间:2023-08-14 作者: 小编 阅读量: 2 栏目名: 高考资讯

图像旋转图形旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。图像的旋转变换也可以用矩阵变换来表示。

图像旋转(Rotation)

图形旋转是以图像的中心为原点,旋转一定的角度,也就是将图像上的所有像素都旋转一个相同的角度。旋转后图像的的大小一般会改变,即可以把转出显示区域的图像截去,或者扩大图像范围来显示所有的图像。图像的旋转变换也可以用矩阵变换来表示。

函数说明:Imgproc.getRotationMatrix2D(Point center, double angle, double scale)

参数详解: Point center:表示旋转的中心点; double angle:表示旋转的角度; double scale:图像缩放因子;

代码案例

package com.what21.opencv01.demo05;import org.opencv.core.Core;import org.opencv.core.Mat;import org.opencv.core.Point;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;/** * 图像旋转 */public class OpenCVRotate {static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}public static void main(String[] args) {Mat src = Imgcodecs.imread("D:/1.jpg");Mat dst = src.clone();//复制矩阵进入dstPoint center = new Point(src.width() / 2.0, src.height() / 2.0);Mat affineTrans = Imgproc.getRotationMatrix2D(center, 33.0, 1.0);Imgproc.warpAffine(src, dst, affineTrans, dst.size(), Imgproc.INTER_NEAREST);Imgcodecs.imwrite("D:/1$1.jpg", dst);affineTrans = Imgproc.getRotationMatrix2D(center, 110.0, 1.1);Imgproc.warpAffine(src, dst, affineTrans, dst.size(), Imgproc.INTER_NEAREST);Imgcodecs.imwrite("D:/1$2.jpg", dst);}}

1.jpg

1$1.jpg

1$2.jpg

透视变换(Perspective Transformation)

透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。

代码案例

package com.what21.opencv01.demo05;import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;import org.opencv.core.Point;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;import org.opencv.utils.Converters;import java.util.List;/** * 透视变换 */public class OpenCVPerspective {static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}public static void main(String[] args) {Mat src = Imgcodecs.imread("D:/1.jpg");//读取图像到矩阵中,取灰度图像if (src.empty()) {return;}try {int xMargin, yMargin;int x0 = src.cols() / 4;int x1 = (src.cols() / 4) * 3;int y0 = src.cols() / 4;int y1 = (src.cols() / 4) * 3;Mat dst = new Mat();List<Point> listSrcs = java.util.Arrays.asList(new Point(x0, y0), new Point(x0, y1), new Point(x1, y1), new Point(x1, y0));Mat srcPoints = Converters.vector_Point_to_Mat(listSrcs, CvType.CV_32F);xMargin = src.cols() / 10;yMargin = src.rows() / 10;List<Point> listDsts = java.util.Arrays.asList(new Point(x0xMargin, y0yMargin), listSrcs.get(1), listSrcs.get(2), new Point(x1 - xMargin, y0yMargin));Mat dstPoints = Converters.vector_Point_to_Mat(listDsts, CvType.CV_32F);Mat perspectiveMmat = Imgproc.getPerspectiveTransform(srcPoints, dstPoints);Imgproc.warpPerspective(src, dst, perspectiveMmat, src.size(), Imgproc.INTER_LINEAR);Imgcodecs.imwrite("D:/1.dst1.jpg", dst);xMargin = src.cols() / 8;yMargin = src.cols() / 8;listDsts.set(0, listSrcs.get(0));listDsts.set(1, listSrcs.get(1));listDsts.set(2, new Point(x1 - xMargin, y1 - yMargin));listDsts.set(3, new Point(x1 - xMargin, y0 - yMargin));dstPoints = Converters.vector_Point_to_Mat(listDsts, CvType.CV_32F);perspectiveMmat = Imgproc.getPerspectiveTransform(srcPoints, dstPoints);Imgproc.warpPerspective(src, dst, perspectiveMmat, src.size(), Imgproc.INTER_LINEAR);Imgcodecs.imwrite("D:/1.dst2.jpg", dst);xMargin = src.cols() / 6;yMargin = src.cols() / 6;listDsts.set(0, new Point(x0xMargin, y0yMargin));listDsts.set(1, listSrcs.get(1));listDsts.set(2, new Point(x1 - xMargin, y1 - yMargin));listDsts.set(3, listSrcs.get(3));dstPoints = Converters.vector_Point_to_Mat(listDsts, CvType.CV_32F);perspectiveMmat = Imgproc.getPerspectiveTransform(srcPoints, dstPoints);Imgproc.warpPerspective(src, dst, perspectiveMmat, src.size(), Imgproc.INTER_LINEAR);Imgcodecs.imwrite("D:/1.dst3.jpg", dst);} catch (Exception e) {e.printStackTrace();}}}

1.dst1.jpg

1.dst2.jpg

1.dst3.jpg

    推荐阅读
  • 尼康P1000和华为P40Pro长焦对比

    华为P40Pro目前售价在8000元左右,而尼康P1000的售价则在6000左右。尼康P1000拍摄的照片中,狗狗的毛发部分无论是层次感,还是边缘处的细节表现,均非常优秀。总体上来看,尼康P1000拍摄的效果,也依然比华为P40Pro要强不少。尼康P1000拍摄的照片中,信号发射台上的组件基本上都可以辨认出来,而华为P40Pro拍摄的照片中,信号发射台组件已经只能辨认出轮廓而已无法再次放大。

  • 再快造句(快快快造句)

    7、我希望再更长、更快的石子园地上回复时间再快一点,这样避震器才不会停止运作。还有,问候不是用来收藏的,要转。

  • 巧克力功效(巧克力有什么功效)

    巧克力,性温,味苦大部分成分是可可脂,还含有脂肪及多种矿物质,现在小编就来说说关于巧克力功效?下面内容希望能帮助到你,我们来一起看看吧!大部分成分是可可脂,还含有脂肪及多种矿物质。

  • 手机卡服务密码怎么查(如何查手机卡服务密码)

    手机卡服务密码怎么查手机卡的服务密码在大家登陆手机营业厅,或者是人工服务办理手机卡的相关业务时都会用到,可见手机卡服务密码的重要性。手机卡服务密码,有联通、移动、电信的手机卡服务密码,这里我们介绍的是移动手机卡的服务密码。移动手机卡的服务密码通常是由一组6位阿拉伯数字组成,客户入网时自行设置或通过密码卡形式提供,如全球通、神州行用户是自行设置的,动感地带用户是以密码卡形式告知

  • 粗粮食物有哪些(粗粮的作用)

    粗粮食物有哪些“粗粮”是相对于稻米、小麦、白面等“细粮”而言的一种称呼,主要是指包括玉米、高粱、小米、荞麦、燕麦、莜麦、薯类及各种豆类等在内的产品。粗粮含有丰富的不可溶性纤维素,有利于保障消化系统正常运转。医学研究还表明,纤维素有助于抵抗胃癌、肠癌、乳腺癌、溃疡性肠炎等多种疾病。

  • 信号单位db是什么(通信db什么单位)

    对于电压或电流,dB=20*log()。

  • 清明期间严查哪些车辆(清明期间交管业务网上办理)

    清明期间严查哪些车辆记者从南京交管部门获悉,为优化交管热线服务,提升后台工作效果。清明期间,交管业务网上办理将暂停,交管热线暂时无法接通。为了方便广大群众在清明小长假期间办理交管业务,南京交管部门各办理窗口4月3日、5日正常开放,4月4日(周日)正常休息。南京交警各大队车驾管、交通违法处理、曝光窗口服务时间为4月3日、5日8:30-17:30,安排专人接待服务,4月4日正常休息。

  • 俯卧撑危害(有危害吗)

    我们一起去了解并探讨一下这个问题吧!俯卧撑危害长期做俯卧撑容易对指关节(拳式)、腕关节(掌式)和肩关节造成较大的压力和冲击,引发以上部分疼痛和受损,所以平时需对这些关节多加保养。做俯卧撑时需要根据自身的素质来把握好度,不要做到极限了依然坚持,否则很容易造成肌肉拉伤等情况,之后的几天胳膊也会使不上劲。

  • 桃花盛开的季节是几月(桃花的开放时间是几月)

    桃花盛开的季节是几月桃树是一种原产中国的落叶小乔木,果实可以鲜食、制果脯、罐头,开的花还可供观赏。

  • 什么是渣女如何判断(什么才是渣女)

    人畜无害外表可爱清甜,没有攻击性。伪装成没有谈过恋爱,单纯可爱,实际心机很重,行为老道。距离感不主动拒绝,不主动要求。时常暧昧,装不懂,单纯,给你若即若离的感觉。心口不一喜欢平凡的,脚踏实地的,很接地气。实际,喜欢有钱的,给花钱的。时常心口不一,高级演员,虚荣。搞暧昧,发好人卡搞暧昧,撩人技术高超。拒绝还装可怜,单纯。擅长发好人卡,攻人心房,掐人软肋。