佳能打印机显示5100i320显示打印机忙碌

OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
图像的几何变换是在不改变图像内容的前提下对图像像素的进行空间几何变换,主要包括了图像的平移变换、镜像变换、缩放和旋转等。本文首先介绍了图像几何变换的一些基本概念,然后再OpenCV2下实现了图像的平移变换、镜像变换、缩放以及旋转,最后介绍几何的组合变换(平移+缩放+旋转)。
1.几何变换的基本概念
1.1 坐标映射关系
图像的几何变换改变了像素的空间位置,建立一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现下面两种计算:
原图像任意像素计算该像素在变换后图像的坐标位置
变换后图像的任意像素在原图像的坐标位置
对于第一种计算,只要给出原图像上的任意像素坐标,都能通过对应的映射关系获得到该像素在变换后图像的坐标位置。将这种输入图像坐标映射到输出的过程称为&向前映射&。反过来,知道任意变换后图像上的像素坐标,计算其在原图像的像素坐标,将输出图像映射到输入的过程称为&向后映射&。但是,在使用向前映射处理几何变换时却有一些不足,通常会产生两个问题:映射不完全,映射重叠
映射不完全 输入图像的像素总数小于输出图像,这样输出图像中的一些像素找不到在原图像中的映射。
上图只有(0,0),(0,2),(2,0),(2,2)四个坐标根据映射关系在原图像中找到了相对应的像素,其余的12个坐标没有有效值。
根据映射关系,输入图像的多个像素映射到输出图像的同一个像素上。
上图的四个像素(0,0),(0,1),(1,0),(1,1)都会映射到输出图像的(0,0)上,那么(0,0)究竟取那个像素值呢?
要解决上述两个问题可以使用&向后映射&,使用输出图像的坐标反过来推算改坐标对应于原图像中的坐标位置。这样,输出图像的每个像素都可以通过映射关系在原图像找到唯一对应的像素,而不会出现映射不完全和映射重叠。所以,一般使用向后映射来处理图像的几何变换。从上面也可以看出,向前映射之所以会出现问题,主要是由于图像像素的总数发生了变化,也就是图像的大小改变了。在一些图像大小不会发生变化的变换中,向前映射还是很有效的。
1.2.插值算法
对于数字图像而言,像素的坐标是离散型非负整数,但是在进行变换的过程中有可能产生浮点坐标值。例如,原图像坐标(9,9)在缩小一倍时会变成(4.5,4.5),这显然是一个无效的坐标。插值算法就是用来处理这些浮点坐标的。常见的插值算法有最邻近插值法、双线性插值法,二次立方插值法,三次立方插值法等。本文主要介绍最邻近插值和双线性插值,其他一些高阶的插值算法,以后再做研究。
最邻近插值
也被称为零阶插值法,最简单插值算法,当然效果也是最差的。它的思想相当简单,就是四舍五入,浮点坐标的像素值等于距离该点最近的输入图像的像素值。
上面的代码可以求得(x,y)的最邻近插值坐标(u,v)。
最邻近插值几乎没有多余的运算,速度相当快。但是这种邻近取值的方法是很粗糙的,会造成图像的马赛克、锯齿等现象。
双线性插值
它的插值效果比最邻近插值要好很多,相应的计算速度也要慢上不少。双线性插值的主要思想是计算出浮点坐标像素近似值。那么要如何计算浮点坐标的近似值呢。一个浮点坐标必定会被四个整数坐标所包围,将这个四个整数坐标的像素值按照一定的比例混合就可以求出浮点坐标的像素值。混合比例为距离浮点坐标的距离。
假设要求坐标为(2.4,3)的像素值P,该点在(2,3)和(3,3)之间,如下图
u和v分别是距离浮点坐标最近两个整数坐标像素在浮点坐标像素所占的比例
P(2.4,3) = u * P(2,3) + v * P(3,3),混合的比例是以距离为依据的,那么u = 0.4,v = 0.6。
上面是只在一条直线的插值,称为线性插值。双线性插值就是分别在X轴和Y轴做线性插值运算。
下面利用三次的线性插值进行双相信插值运算
(2.4,3)的像素值 F1 = m * T1 + (1 & m) * T2
(2.4,4)的像素值 F2 = m * T3 + (1 & m ) * T4
(2.4,3.5)的像素值 F = n * F1 + (1 & n) * F2
这样就可以求得浮点坐标(2.4,3.5)的像素值了。
求浮点坐标像素F,设该浮点坐标周围的4个像素值分别为T1,T2,T3,T4,并且浮点坐标距离其的横坐标的差为m,纵坐标的差为n。
F1 = m * T1 + (1 & m) * T2
F2 = m * T3 +& (1 & m) *T4
F = n * F1 + (1 & n) * F2
上面就是双线性插值的基本公式,可以看出,计算每个像素像素值需要进行6次浮点运算。而且,由于浮点坐标有4个坐标近似求得,如果这个四个坐标的像素值差别较大,插值后,会使得图像在颜色分界较为明显的地方变得比较模糊。
2.图像平移
图像的平移变换就是将图像所有的像素坐标分别加上指定的水平偏移量和垂直偏移量。平移变换根据是否改变图像大小分为两种
左边平移图像的大小发生了,在保证图像平移的同时,也保存了完整的图像信息。右边的平移图像大小没有变化,故图像的部分被截除了。
2.1平移变换原理
设dx为水平偏移量,dy为垂直偏移量,(x0,y0)为原图像坐标,(x,y)为变换后图像坐标,则平移变换的坐标映射为
这是向前映射,即将原图像的坐标映射到变换后的图像上。
其逆变换为
,向后映射,即将变换后的图像坐标映射到原图像上。在图像的几何变换中,一般使用向后映射。
2.2 基于OpenCV的实现
图像的平移变换实现还是很简单的,这里不再赘述.
平移后图像的大小不变
void GeometricTrans::translateTransform(cv::Mat const& src, cv::Mat& dst, int dx, int dy)
CV_Assert(src.depth() == CV_8U);
const int rows = src.
const int cols = src.
dst.create(rows, cols, src.type());
for (int i = 0; i & i++)
p = dst.ptr&Vec3b&(i);
for (int j = 0; j & j++)
//平移后坐标映射到原图像
int x = j -
int y = i -
//保证映射后的坐标在原图像范围内
if (x &= 0 && y &= 0 && x & cols && y & rows)
p[j] = src.ptr&Vec3b&(y)[x];
平移后图像的大小变化
void GeometricTrans::translateTransformSize(cv::Mat const& src, cv::Mat& dst, int dx, int dy)
CV_Assert(src.depth() == CV_8U);
const int rows = src.rows + abs(dy); //输出图像的大小
const int cols = src.cols + abs(dx);
dst.create(rows, cols, src.type());
for (int i = 0; i & i++)
p = dst.ptr&Vec3b&(i);
for (int j = 0; j & j++)
int x = j -
int y = i -
if (x &= 0 && y &= 0 && x & src.cols && y & src.rows)
p[j] = src.ptr&Vec3b&(y)[x];
ps:这里图像变换的代码以三通道图像为例,单通道的于此类似,代码中没有做处理。
3.图像的镜像变换
图像的镜像变换分为两种:水平镜像和垂直镜像。水平镜像以图像垂直中线为轴,将图像的像素进行对换,也就是将图像的左半部和右半部对调。垂直镜像则是以图像的水平中线为轴,将图像的上半部分和下班部分对调。效果如下:
3.1变换原理
设图像的宽度为width,长度为height。(x,y)为变换后的坐标,(x0,y0)为原图像的坐标
水平镜像变换
其逆变换为
垂直镜像变换
其逆变换为
3.2基于OpenCV的实现
水平镜像的实现
void GeometricTrans::hMirrorTrans(const Mat &src, Mat &dst)
CV_Assert(src.depth() == CV_8U);
dst.create(src.rows, src.cols, src.type());
int rows = src.
int cols = src.
switch (src.channels())
const uchar *
for (int i = 0; i & i++){
origal = src.ptr&uchar&(i);
p = dst.ptr&uchar&(i);
for (int j = 0; j & j++){
p[j] = origal[cols - 1 - j];
const Vec3b *origal3;
Vec3b *p3;
for (int i = 0; i & i++) {
origal3 = src.ptr&Vec3b&(i);
p3 = dst.ptr&Vec3b&(i);
for(int j = 0; j & j++){
p3[j] = origal3[cols - 1 - j];
分别对三通道图像和单通道图像做了处理,由于比较类似以后的代码只处理三通道图像,不再做特别说明。
在水平镜像变换时,遍历了整个图像,然后根据映射关系对每个像素都做了处理。实际上,水平镜像变换就是将图像坐标的列换到右边,右边的列换到左边,是可以以列为单位做变换的。同样垂直镜像变换也如此,可以以行为单位进行变换。
垂直镜像变换
void GeometricTrans::vMirrorTrans(const Mat &src, Mat &dst)
CV_Assert(src.depth() == CV_8U);
dst.create(src.rows, src.cols, src.type());
int rows = src.
for (int i = 0; i & i++)
src.row(rows - i - 1).copyTo(dst.row(i));
src.row(rows - i - 1).copyTo(dst.row(i));
上面一行代码是变换的核心代码,从原图像中取出第i行,并将其到目标图像。
顶不住了啊,写理论部分太痛苦了啊,明天继续几何变换的后续几种:转置、缩放、旋转以及组合变换。
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
在OpenCV2:图像的几何变换,平移.镜像.缩放.旋转(1)主要介绍了图像变换中的向前映射.向后映射.处理变换过程中浮点坐标像素值的插值算法,并且基于OpenCV2实现了两个简单的几何变换:平移和镜像变换.本文主要稍微复杂点的两个几何变换:缩放和旋转. 1.图像缩放 图像的缩放主要用于改变图像的大小,缩放后图像的图像的宽度和高度会发生变化.水平缩放系数,控 ...
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/),请尊重他人的辛勤劳动成果,谢谢!相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对图片进行旋转操作,大家都知道对 ...
关注javalearns
随时随地学Java 或扫一扫 随时随地学Java 相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对图片进行旋转操作,大家都知道对图片进行缩放,平移,旋转等操作可以使用Matrix来实现,Matrix就是一个3X3的矩阵,对图片的处理可分为 ...
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程&数字图像处理&及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形旋转.图像反转倒置镜像和图像缩放的知识.同时文章比较详细基础,没有采用GDI+获取矩阵,而是通过读取BMP图片信息头和矩阵像素实现变换,希望该篇文 ...
16:38 转载自 huangwen2003 最终编辑 huangwen2003 声明:本文原创于yafeilinux的百度博客,/yafeilinux 转载请注明出处. 现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲.这里我们是利用QPixmap类来实现图片显示的. 一 ...
仿射变换的原理 在条形码识别软件中有图像预览的功能.有时预览的图像需要进行转置(旋转180度或者90度).缩放.镜像(左右反转)等操作.OpenCV提供了相应的函数进行以上操作.例如: 转置:cv::WarpAffine() 缩放:cv::resize() 镜像:cv::remap() 如果同时要转置,缩放和镜像,就需要进行三次图像运算.其实以上三个操作都是 ...
#region 设置分辨率 using (Graphics g = pictureBox2.CreateGraphics()) { g.Clear(pictureBox2.BackColor);//清空 Bitmap bmp = new Bitmap(pictureBox1.Image);//创建bitmap对象 ///设置分辨率 bmp.SetResolu ...
图像的一些操作,可以通过矩阵进行简化,例如,旋转,平移,缩放,切边等,下面看如果简化. 还记得过去中学时代学的旋转公式嘛? 可以让x,y绕坐标原点顺时针旋转一个θ角度,当然,如果你希望,不是绕坐标原点旋转,而是自定义的一个点的话,那么可以平移坐标后,再旋转: 平移坐标公式是, x = x - a y = y - b
简单的上面两个操作,我们可以一个一个进行 ...0&&parseInt(document.getElementById('custompage').value)页&&1&&parseInt(document.getElementById('custompage').value)楼&&
回复:10 &查看:3544 &
为什么我调节左边的后视镜,右边也跟着一起动
财产: 1279 爱卡币
为什么我调节左边的后视镜,右边也跟着一起动
调节左边后视镜右边跟着动,调节右边左边也一样跟着动
[每日热点]:
财产: 4160 爱卡币
[每日热点]:
财产: 64976 爱卡币
来自: 北京市|北京市
不正常。调节右边的后视镜,左边的后视镜不应该随动。
[ 本帖最后由 乾帕郎 于
07:59 编辑 ]
[每日热点]:
财产: 71 爱卡币
来自: 四川省|德阳市
串门了哇?
[每日热点]:
财产: 6795 爱卡币
来自: 天津市|天津市
调节左边后视镜右边跟着动,调节右边左边也一样跟着动 这是正常的。
咱们的领域,调节某一边(忘记哪边了)时是独立调节的,但是另外一边的调节是联动的。
[每日热点]:
财产: 772 爱卡币
来自: 陕西省|西安市
有不懂装懂得,记住了,右边单独调,调左边右边一起动。你这正常
[每日热点]:
财产: 16031 爱卡币
来自: 四川省|成都市
我的也是,说明书上有说明,L是两个一起大幅度调整,R是微调右边的。
我承诺:在DYD收回前,不再购买任何日笨货,不去日笨观光,不买日笨书籍唱片,不吃日笨食物饮料…在他们恢复正常前,对日笨一切说不。
我更承诺:不损坏同胞手里的任何日笨货。不摔同胞手里的相机,不砸街上的日笨车,不烧市面上的漫画书。我们有各自抵制的义务,但没有彼此损坏的权利。--飞狐
[每日热点]:
财产: 1279 爱卡币
原来一起动是正常啊
[每日热点]:
财产: 3499 爱卡币
来自: 辽宁省|朝阳市
B5也是这样的,调左边的,两个一起动,右边的单独动,不过我忘了啥车了,只要一倒挡,右边镜子自动向下调整
[每日热点]:
xuser7920777
财产: 5131 爱卡币
来自: 山东省|潍坊市
有不懂装懂得,记住了,右边单独调,调左边右边一起动。你这正常 正解
[每日热点]:
回复成功,收到1个大米!
10&&parseInt(document.getElementById('custompage_down').value)页楼
相关论坛:  左右手可以同时写字的烦恼:我弟11岁,四年级,有一次打球右手骨折,然后就用左手写字,写一篇作文,从右边开始起行往左写,且全部是反的,镜像的,只有透过背面才看得出。接着我们让他试着两手同时写同样的字,全写成镜像字。可以左手画圈右手画方。读书不得,简单算术都不能口算,还用计算器。喜欢上网玩游戏,看关于机械模型类。能自己画出火车头施工图想让人帮他用木头来加工制作。因先天疾病,染色体搭接错误,常表现出一些不太正常的无意识行为,说话发音不是很清楚。读书不得,但是脑子一点都不笨,思维超常人,对于3D模型,机械拆解那些看电视视频就懂得。跪求解,或者知道这方面的专家医生,或者 如何培养这样的孩子。
楼主发言:8次 发图: | 更多
  楼主,你说的左手可以不假思索的写出镜像的字,我在上学时也无意发现自己能这样,并且十多年来周围的同学和同事没发现别人能这样,但我没觉得其他方面有什么特别不同的啊?
  是可以不假思索的写出来,一笔一笔的同时写,我们写不出,他还较我们怎么写。读书一点都不懂,四年级了。十以内的算术还要计算器才算出。看电视视频关于机械模型的节目、超级拆解等,一看就懂。如何才能培养好这个孩子,我们很苦恼。开家长会的时候,他班主任说,他是怪才,一点都不笨,写作文全部是反字的。后来我们才发现他有这个特性。
  还有在玩百变魔方时一下就能转好。问了一些人,说是奇才,但是我们不知道怎么办,他的心思一点都不在学习上,写字也不好。
  请看印度电影,地球上的星星。讲的就是这个学生  
  不瞎说这个我从小也会,所以没什么稀奇的,右手写什么风格左手自然就会。我小时候还专门用左手写过日记,因为不好认。  不要以为有这个小能力就有什么大用处,真的。
  我想有没有人知道怎么培养这样的孩子。
      
    左手写成镜像字,右手写成正字
  不知道是不是脑桥摔到了。。。找家医院搭起来吧。。。有没有运动不协调的情况啊?  
  哈哈,左右互博,以后撸管肯定很强
  以上纯属开玩笑,这个和以前看到的大脑受损后变身牛人很类似,只是你弟天然造就
  我早就知道我也有这个功能,很多人都这样,不奇怪。
  你想说你弟弟是天才。
  各位,我觉得我弟弟很可怜,他写反字都不知道那是错误的,我们不认为那是什么才,或是什么才我们也不知道。在这里说明这个情况,只希望能有个这方面的专家或者医生给一点点实质性的建议,四年级的孩子认字都没有一年级的多,写也不必一年级生的好。我只想拯救我的弟弟,有心的朋友见到这个信息麻烦帮传递一下信息,人多力量大,希望有一日找到能够给予答案的大师。
  各位,我想说的是:我觉得我弟弟很可怜,手受伤的时候写出来的字全部是反的,他都不知道那是反字。我们叫他两手写,他写出来的也不知道是写错了,我不认为我弟弟是什么才,也许是什么才但是我们也不知道怎么办,读四年级了还没有一年级的人会写字会认字。我想有懂得的人给一点建议,希望在这里能够见到这方面的医学专家。
  到医院问问吧,没必要吹你弟弟了,我看过这方面的书,外国学者调查:天生残疾的人每1000个就有几个会有某方面的惊人专长。比如哈尔滨有个小朋友有着无比强大的音乐记忆(复制)功能,不管你唱啥一遍他都能记住,但他不知道是啥意思。就看你如何引导了,况且你弟弟不是先天残疾,你说的这种功能我们小时候都在一定程度具备,只不过看惯了顺手字,哪有心情去研究镜像字?还不如研究几个立体几何题目实在。
  楼主还在嘛,你弟弟可能是左撇子,一定要细心引导。他的天才表现是因为他开发的右脑。你可以百度左撇子纠正的危害,你弟弟应该占了很多。可以加我q   
  他可能是注意力不能集中,理解力不强,体现在阅读文章上,这个我也有。口吃,但是空间想象力超强。因为很多问题我也有,记忆调用有障碍,所以我研究过一会儿。我是左撇子被纠正  
  我也是无意中发现自己会左右写镜像字,只要右手会写的字体,左手在没有练习过的情况下都可以不假思索地写下来~~~小时候是左撇子,长大了不管子拿筷子、用刀还是其它的,左右手两手都会用的
<span class="count" title="万
<span class="count" title="
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)左边鼓大包。右边腰部同时也跟着鼓小包。有一样情况的宝妈么_如_宝宝树
1共3页 直接到页
左边鼓大包。右边腰部同时也跟着鼓小包。有一样情况的宝妈么
如题。这是同时进行的。
我是左边小包,右边腰部鼓大包,我两刚好相反
是啊。宝妈照男女了么
回复 &黑猫警长131&
15:33:22发表的
我是左边小包,右边腰部鼓大包,我两刚好相反
我的肚肚上~大包那边是屁屁~小包是手和脚~~
我和你相反的位置
两个地方同时鼓包是宝宝在伸懒腰,我家经常左边底下鼓大包同时右上面靠腰鼓小包,这是宝宝刚睡醒在伸懒腰呢!他经常在我睡醒的时候他也醒过来伸懒腰呵呵!
和你一样,我家臭宝左枕前,大包小屁股,小包小脚丫
'我和你一样'
喔喔。宝妈是男宝还是女宝
回复 &菩提善子&
15:38:36发表的
两个地方同时鼓包是宝宝在伸懒腰,我家经常左边底下鼓大包同时右上面靠腰鼓小包,这是宝宝刚睡醒在伸懒腰呢!他经常在我睡醒的时候他也醒过来伸懒腰呵呵!
宝妈男宝还是女宝
回复 &熊可可77&
15:39:08发表的
和你一样,我家臭宝左枕前,大包小屁股,小包小脚丫
听说鼓包是女宝。你照了么
回复 &孕期用户14-05-02 15:39:24发表的
'我和你一样'
没有照'我也是最近才这样'
回复 &白白voula&
15:40:53发表的
听说鼓包是女宝。你照了么
我跟你一样,左边鼓好厉害医生说是屁股。右边时不时也鼓起来,没有左边鼓得厉害
宝妈。你的是男宝女宝
回复 &宝梨&
15:42:54发表的
我跟你一样,左边鼓好厉害医生说是屁股。右边时不时也鼓起来,没有左边鼓得厉害
一般都是撅屁股蹬腿
请问是男宝女宝呢
回复 &大兔子Q&
15:48:21发表的
一般都是撅屁股蹬腿
我也是和你一样
男宝女宝?
回复 &名花一小朵1&
15:50:58发表的
我也是和你一样
一样,胎位是loa
bc男宝,你呢?
回复 &白白voula&
15:45:43发表的
宝妈。你的是男宝女宝
宫缩我也是
左边鼓大包。右边腰部同时也跟着鼓小包。有一...相关的更多内容:
[知识] [知识] [知识] [知识] [知识]
需要账号和密码的外链可能是钓鱼网站,为了您的账号和财产安全,请勿提供任何有效信息!

我要回帖

更多关于 佳能打印机显示e04 的文章

 

随机推荐