[opencv] 图像旋转180度要注意的细节问题

两种方法:

第一种传统warpAffine

    cv::Point2f center = cv::Point2f(image.cols / 2, image.rows / 2);
    cv::Mat rotateMat;
    rotateMat = cv::getRotationMatrix2D(center, 180,1);
    cv::Mat rotateImg;
    cv::warpAffine(image, rotateImg, rotateMat, image.size());  

第二种transpose + flip

    transpose(image,b);
    ////transpose(b,b);
    flip(b,b,1);    //Horizontal flipping
    transpose(b,b);
    flip(b,b,1);    //Horizontal flipping

结果展示,主体都没问题,123是第二种transpose + flip结果,234是第一种warpAffine

细节在于warpAffine会有one pixel的黑边。下图依次是原图的右下角像素点,123图左上角像素点,234图左上角像素点。

      

时间: 2024-10-12 15:33:59

[opencv] 图像旋转180度要注意的细节问题的相关文章

Recovery和Charger模式下屏幕旋转180度[转]

如何让Recovery (系统固件升级),charger(关机充电动画)时屏幕旋转180度 解决方法: 1.在bootable\recovery\minui\Graphics.c 文件找到gr_flip(void)方法 把memcpy(gr_framebuffer[gr_active_fb].data,gr_mem_surface.data, fi.line_length*vi.yres);修改为 rotate_180(gr_framebuffer[gr_active_fb].data,gr_m

将图像旋转90度

题目:给定一幅由N*N矩阵表示的图像,其中每个像素的 大小为4字节,编写一个方法,将图像旋转90度.不占用额外内存空间能否做到? 那么,该如何交换这四条边?一种做法是把上面复制到一个数组中,然后将左边移到上边,下边移到到左边,等等.这需要占用O(N)内存空间.但实际上没有必要, 更好的做法是按索引一个一个进行交换.具体做法如下: for i = 0 to n temp = top[i]; top[i] = left[i]; left[i] = bottom[i]; bottom[i] = rig

代码记录:使用Aforge.net让视频图像反转180度

1 private void CameraConn() 2 { 3 4 videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString); 5 videoSource.DesiredFrameSize = new Size(640, 480); 6 videoSource.DesiredFrameRate = 30; 7 videoSource.NewFrame += new

用OpenCV实现Photoshop算法(一): 图像旋转

最近学习了OpenCV,于是想用它实现Photoshop的主要功能,用于照片处理. 对于一张照片,PS的一般处理步骤包括: 1, 旋转图片,校正位置. 2,剪切,调整大小,重新构图. 3,调整色阶.曲线,使图片曝光正确.对比适中. 4,调整对比度.饱和度 5,印章去掉不想要的东西,液化调整形体线条 6,对于人像图片,美肤.美白 7, 用色彩平衡.可选颜色等调整色调,形成照片调性 8,加一些光效 9,锐化 以后的一系列博文将采用OpenCV逐一实现Photoshop的算法和功能, 并用计算机视觉人

CC150:将一个矩阵旋转90度

一张图像表示成n X n的矩阵,写一个函数把图像旋转90度.不开辟额外的存储空间 我们假设要将图像逆时针旋转90度.原图如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 逆时针旋转90度后的图应该是: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 我们要如何原地进行操作以达到上面的效果呢?可以分两步 第一步交换主对角线两侧的对称元素, 第二步交换第i行和第n-1-i行,即得到结果. 看图示: 原图:           第一

矩阵旋转90度(keep it up)

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. 你能原地进行操作吗?(即不开辟额外的存储空间) 这个题第一感觉就是一次交换矩阵的元素: 比如 3*3 矩阵 1 2 3 4 5 6 7 8 9 先处理第一行,一次逆时针旋转四个元素,下面是二次做的 3 2 9          3 6 9 4 5 6          2 5 8 1 8 7          1 4 7 第一次         第二次 如果是5*5的矩阵 1   2   3   4   5 6

关于 Activity 横屏翻转 180度的问题

今天做了一个横屏视频播放,需要实现用户横屏的时候,翻转180度,Activity也跟着翻转180度,经过查询资料终于搞定了.把它记下来,免得以后忘记. step1: 为了防止翻转的时候重新创建Activity.所以需要在在androidmanifest.xml给Activity配置android:configChanges属性 代码如下: <activity android:name="cc.angis.jy365.activity.VideoPlayerActivity" an

ios系统 竖屏拍照 canvas处理后 图片旋转(利用exif.js解决ios手机上传竖拍照片旋转90度问题)

转:https://www.cnblogs.com/lovelgx/articles/8656615.html ---恢复内容开始--- 问题:html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 解决方法:利用exif.js解决ios手机上传竖拍照片旋转90度问题 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正. 利用exif.js读取照片的拍摄信息,详见 htt

通过transpose和flip实现图像旋转90/180/270度

在fbc_cv库中,提供了对图像进行任意角度旋转的函数rotate,其实内部也是调用了仿射变换函数warpAffine.如果图像仅是进行90度倍数的旋转,是没有必要用warpAffine函数的.这里通过transpose和flip函数实现对图像进行顺时针90度.180度.270度的旋转. 用fbc::transpose.fbc::flip和cv::transpose.cv::flip实现的结果是完全一致的. 通过fbc_cv库实现代码如下: #include "test_rotate90.hpp