精华内容
下载资源
问答
  •  1)将源图像保存到缓冲区,并记录下缓冲区的地址  2)获取源图像的高度和宽度,计算出源图像的中心点坐标(a0, b0)。以(a0,b0)为坐标原点,计算出源图像4个顶点的坐标。  3)采用某种交互方式(如对话框),...

     图像旋转本质是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度

     算法描述:

     1)将源图像保存到缓冲区,并记录下缓冲区的地址

     2)获取源图像的高度和宽度,计算出源图像的中心点坐标(a0, b0)。以(a0,b0)为坐标原点,计算出源图像4个顶点的坐标。

     3)采用某种交互方式(如对话框),获取图像的旋转角度。

     4)分配内存,以保存旋转后的图像

     5)根据步骤3)中设定的旋转角度及源图像中每个像素点的坐标值,获得旋转后各像素点的新坐标值,实现图像的旋转。根据源图像4个顶点的坐标旋转后的坐标值,确定新 

          图像中心及高度和宽度,不显示已经超出范围的图像。

     

     算法实现:

     

    /*************************************************************************
    * 函数名称:Rotate(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lWidth, long lHeight,
    long lLineBytes, WORD palSize, long lDstWidth,
    long lDstHeight,long lDstLineBytes,float fSina, float fCosa)
    * 函数参数:
    *   LPSTR lpSrcDib,指向源DIB的指针
    *   LPSTR lpSrcStartBits,指向源DIB的起始像素的指针
    *   long lWidth,源DIB图像宽度
    *   long lHeight,源DIB图像高度
    *  long lLineBytes,源DIB图像字节宽度(4的倍数)
    *  WORD palSize,源DIB图像调色板大小
    *  long lDstWidth,目标图像宽度
    *  long lDstHeight,目标DIB图像高度
    *  long lDstLineBytes,目标DIB图像行字节数(4的倍数)
    *  float fSina,旋转角的余弦,说明:为了避免两次求取正余弦,这里作为两个函数参数来用
    *  float fCosa,旋转角的正弦
    * 函数类型:HGLOBAL
    * 函数功能:用来旋转DIB图像
    ************************************************************************/
    HGLOBAL  Rotate(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lWidth, long lHeight,
        long lLineBytes, WORD palSize, long lDstWidth,
        long lDstHeight,long lDstLineBytes,float fSina, float fCosa)

     float varFloat1;        //浮点参数变量1
     float varFloat2;        //浮点参数变量2
     LPSTR lpDstDib;  //指向临时图像的指针

     long i;                 //行循环变量
     long j;                 //列循环变量
     long i1;                 //行循环变量
     long j1;                 //列循环变量
     LPSTR lpSrcDIBBits; //指向源像素的指针
     LPSTR lpDstDIBBits; //指向临时图像对应像素的指针
     LPSTR lpDstStartBits; //指向临时图像对应像素的指针    

     LPBITMAPINFOHEADER lpbmi;// 指向BITMAPINFOHEADER结构的指针  
     varFloat1= (float) (-0.5 * (lDstWidth - 1) * fCosa - 0.5 * (lDstHeight - 1) * fSina// 将经常用到的两个常数事先求出,以便作为常数使用
      + 0.5 * (lDstWidth  - 1));
     varFloat2= (float) ( 0.5 * (lDstWidth - 1) * fSina - 0.5 * (lDstHeight - 1) * fCosa
      + 0.5 * (lDstHeight - 1));  
     HGLOBAL hDIB = (HGLOBAL) ::GlobalAlloc(GHND, lDstLineBytes * lDstHeight + *(LPDWORD)lpSrcDib +palSize);// 分配内存,以保存新DIB  
     if (hDIB == NULL)// 判断是否是有效的DIB对象
     {  
      return FALSE;// 不是,则返回
     } 
     lpDstDib=  (char * )::GlobalLock((HGLOBAL) hDIB);// 锁定内存  
     memcpy(lpDstDib,lpSrcDib, *(LPDWORD)lpSrcDib +palSize);// 复制DIB信息头和调色板   

     lpbmi = (LPBITMAPINFOHEADER)lpDstDib;// 获取指针 
     lpbmi->biHeight=lDstHeight;// 更新DIB中图像的高度和宽度
     lpbmi->biWidth =lDstWidth;

     lpDstStartBits=lpDstDib+ *(LPDWORD)lpDstDib
      +palSize;// 求像素起始位置,作用如同::FindDIBBits(gCo.lpSrcDib),这里尝试使用了这种方法,以避免对全局函数的调用

     for(i = 0; i < lDstHeight; i++)// 行操作
     {  
      for(j = 0; j < lDstWidth; j++)// 列操作
      {   
       lpDstDIBBits= (char *)lpDstStartBits+ lDstLineBytes * (lDstHeight - 1 - i) + j;// 指向新DIB第i行,第j个像素的指针   
       i1= (long) (-((float) j) * fSina + ((float) i) * fCosa + varFloat2 + 0.5);// 计算该像素在源DIB中的坐标
       j1= (long) ( ((float) j) * fCosa + ((float) i) * fSina + varFloat1 + 0.5);      
       if( (j1>= 0) && (j1< lWidth) && (i1>= 0) && (i1< lHeight))
       {// 判断是否在源图内    
        lpSrcDIBBits= (char *)lpSrcStartBits+ lLineBytes * (lHeight - 1 -i1) + j1;// 指向源DIB第i0行,第j0个像素的指针        
        *lpDstDIBBits= *lpSrcDIBBits;// 复制像素
       }
       else
       {
        * ((unsigned char*)lpDstDIBBits) = 255;// 源图中不存在的像素,赋为255
       }   
      }  
     }
     return hDIB;
    }

     

    VC编程实现(基于VS2010):

     

     代码链接:点击打开链接

    展开全文
  • 镜像是两个物体关于中轴线对称的一种状态。  图像的镜像分为两种:水平镜像、... 1)将源图像保存到缓冲区,并记录下缓冲区的地址。  2)分配内存,以保存镜像后的图像。  3)确定图像的镜像方式,是水平镜像还是垂

     镜像是两个物体关于中轴线对称的一种状态。

     图像的镜像分为两种:水平镜像、垂直镜像

     水平镜像:是将图像左半部分和右半部分以图像垂直中轴线为中心进行镜像对换

     垂直镜像:是将图像上半部分和下半部分以图像水平中轴线为中心进行镜像对换。

     

     算法描述:

     1)将源图像保存到缓冲区,并记录下缓冲区的地址。

     2)分配内存,以保存镜像后的图像。

     3)确定图像的镜像方式,是水平镜像还是垂直镜像。

     4)根据设定的镜像方式及源图中每个像素点的坐标值,计算出镜像后各像素点的新坐标值,实现图像的镜像。

     

     

    /*************************************************************************
    * 函数名称:Mirror(LPSTR lpSrcStartBits, long lWidth, long lHeight,long lLineBytes)
    * 函数参数:
    LPSTR lpSrcStartBits,指向DIB起始像素的指针
    long lWidth,DIB图像的宽度
    long lHeight,DIB图像的高度
    long lLineBytes,DIB图像的行字节数,为4的倍数
    * 函数类型:BOOL       
    * 函数功能:该函数用来镜像DIB图像,本程序只实现了水平镜像,垂直镜像的原理书中也谈到。 很容易实现          
    ************************************************************************/

    BOOL  Mirror(LPSTR lpSrcStartBits, long lWidth, long lHeight,long lLineBytes)

     long i;                 //行循环变量
     long j;                 //列循环变量
     LPSTR lpSrcDIBBits; //指向源像素的指针
     LPSTR lpDstDIBBits; //指向临时图像对应像素的指针   
     HLOCAL hDstDIBBits; //临时图像句柄
     LPSTR lpBits; // 指向中间像素的指针,当复制图像时,提供临时的像素内存空间
     hDstDIBBits= LocalAlloc(LHND, lLineBytes);// 分配临时内存保存行图像
     if (hDstDIBBits == NULL)  
     {  
      return FALSE;         // 分配内存失败
     }  
     lpDstDIBBits= (char * )LocalLock(hDstDIBBits);// 锁定    
     for(i = 0; i < lHeight; i++)// 水平镜像,针对图像每行进行操作
     {   
      for(j = 0; j < lWidth / 2; j++)// 针对每行图像左半部分进行操作
      {       
       lpSrcDIBBits= (char *)lpSrcStartBits + lLineBytes * i + j;// 指向倒数第i行,第j个像素的指针        
       lpBits= (char *)lpSrcStartBits + lLineBytes * (i + 1) - j;// 指向倒数第i+1行,倒数第j个像素的指针        
       *lpDstDIBBits=*lpBits;//保存中间像素        
       *lpBits = *lpSrcDIBBits;// 将倒数第i行,第j个像素复制到倒数第i行,倒数第j个像素        
       *lpSrcDIBBits=*lpDstDIBBits;// 将倒数第i行,倒数第j个像素复制到倒数第i行,第j个像素
      }   
     }  
     LocalUnlock(hDstDIBBits);// 释放内存
     LocalFree(hDstDIBBits);
     return TRUE;
    }

    /*************************************************************************
    * 函数名称:Mirror2(LPSTR lpSrcStartBits, long lWidth, long lHeight,long lLineBytes)
    * 函数参数:
    LPSTR lpSrcStartBits,指向DIB起始像素的指针
    long lWidth,DIB图像的宽度
    long lHeight,DIB图像的高度
    long lLineBytes,DIB图像的行字节数,为4的倍数
    * 函数类型:BOOL       
    * 函数功能:该函数用来垂直镜像DIB图像        
    ************************************************************************/

    BOOL  Mirror2(LPSTR lpSrcStartBits, long lWidth, long lHeight,long lLineBytes)

     long i;                 //行循环变量
     long j;                 //列循环变量
     LPSTR lpSrcDIBBits; //指向源像素的指针
     LPSTR lpDstDIBBits; //指向临时图像对应像素的指针   
     HLOCAL hDstDIBBits; //临时图像句柄
     LPSTR lpBits; // 指向中间像素的指针,当复制图像时,提供临时的像素内存空间
     hDstDIBBits= LocalAlloc(LHND, lLineBytes);// 分配临时内存保存行图像
     if (hDstDIBBits == NULL)  
     {  
      return FALSE;         // 分配内存失败
     }  
     lpDstDIBBits= (char * )LocalLock(hDstDIBBits);// 锁定    
     for(i = 0; i < lHeight / 2; i++)// 垂直镜像,针对图像每行进行操作
     {   
      //for(j = 0; j < lWidth / 2; j++)// 针对每行图像左半部分进行操作
      //{       
      lpSrcDIBBits= (char *)lpSrcStartBits + lLineBytes * i ;//+ j;// 指向倒数第i行,第j个像素的指针        
      lpBits= (char *)lpSrcStartBits + lLineBytes * (lHeight - i + 1);// - j;// 指向倒数第i+1行,倒数第j个像素的指针        
      memcpy(lpDstDIBBits, lpBits, lLineBytes);
      memcpy(lpBits, lpSrcDIBBits, lLineBytes);
      memcpy(lpSrcDIBBits, lpDstDIBBits, lLineBytes);
      //*lpDstDIBBits=*lpBits;//保存中间像素        
      //*lpBits = *lpSrcDIBBits;// 将倒数第i行,第j个像素复制到倒数第i行,倒数第j个像素        
      //*lpSrcDIBBits=*lpDstDIBBits;// 将倒数第i行,倒数第j个像素复制到倒数第i行,第j个像素
      //}   
     }  
     LocalUnlock(hDstDIBBits);// 释放内存
     LocalFree(hDstDIBBits);
     return TRUE;
    }

     

     VC编程实现(基于VS2010):

     

     

    代码链接:点击打开链接

    展开全文
  • 操作系统之地址变换机构

    千次阅读 2018-11-28 20:29:12
    地址变换机构的目的就是将用户地址空间中的逻辑地址转换为内存空间中的物理地址。 由于此转换的频率非常高,所以需要采用硬件来实现。 页表功能是由一组专门的寄存器实现的 由于寄存器具有较高访问速度,因而有利...

    地址变换机构的目的就是将用户地址空间中的逻辑地址转换为内存空间中的物理地址

    由于此转换的频率非常高,所以需要采用硬件来实现。

    页表功能是由一组专门的寄存器实现的

    由于寄存器具有较高访问速度,因而有利于提高地址变换的速度

    一个页表有很多页表项,一个页表项用一个寄存器

    但是由于成本、资源问题,又不可能都用寄存器实现,所以,页表大多贮存在内存

    在系统中只设置一个页表寄存器PTR

    在这里插入图片描述
    上图取于百度图片

    由于目的是逻辑地址转变为物理地址,分为下面6布
    1.首先将逻辑地址分为页号和页内地址
    2.以页号为索引去检索页表
    3.将页号与页表长度进行比较(若页号大于页表长度则表示,所访问的地址已经超越进程的地址空间,出现越界中断)
    4.由硬件执行查找操作
    5.将页表始址与页号和页表项长度的乘积相加,得到该表项在页表中的位置(可从中得到该页的物理块号)
    6.拼接之前的页内地址,形成物理地址

    例题

    页号P页内地址d的求法
    设A — 逻辑地址空间中的地址
    L — 页面大小
    页号P = INT [ A / L ]
    页内地址d = [A] MOD L
    例 :A = 2170 B L = 1 KB
    P = INT [ A / L ] = INT [ 2170/1024 ] = 2
    d = [ A ] MOD L = [ 2170 ] MOD 1024 =122
    先把1KB与B进行换算,1KB=1024B,

    在这里插入图片描述

    分段地址变换

    实现逻辑地址转变到物理地址。
    1.首先将逻辑地址的段号S与段表长度TL进行比较,若S>TL,表示段号太大,是访问越界,于是产生越界中断信号。
    2.未越界则根据段表的始址和该段的段号,计算出该段对应段表项的位置。

    展开全文
  • opencv图像变换

    2018-09-16 09:53:16
    消除图像中的噪声成分叫做...在函数参数传递的过程中,传递的是Mat对象的地址,即函数中对Mat对象操作时,源对象的值也会发生变化。 漫水填充: 漫水填充类似于ps的魔术棒,函数filoodFill的参数中mask的作用是...

    消除图像中的噪声成分叫做平滑化或者滤波操作,平滑滤波操作的目的有两个,一是模糊,二是消除噪声。
    在均值滤波,方框滤波以及函数getStructuringElement中的内核的Size值都不能为零。
    在函数参数传递的过程中,传递的是Mat对象的地址,即函数中对Mat对象操作时,源对象的值也会发生变化。
    漫水填充:
    漫水填充类似于ps的魔术棒,函数filoodFill的参数中mask的作用是在原图或者mask掩模区域被填充过一次之后就不会再填充,同时在flag中设置了FLOODFILL_MASK_ONLY后,只会填充掩模,不会填充原图。使用填充效果FLOODFILL_FIXED_RANGE就是设置了渐变固定范围的填充,在相同的LowDiff和UpDiff情况下,渐变固定范围要比渐变浮动范围的填充区域小。
    LowDiff和UpDiff指的是当前像素与其种子像素(FLOODFILL_FIXED_RANGE)或者领域像素(没有设置FLOODFILL_FIXED_RANGE)的亮度或颜色的正负差的最大值。
    在没有设置mask的情况下,floodFill函数不能设置FLOODFILL_MASK_ONLY参数,否则原图无法出现填充效果。

    在图像缩小中要注意尺寸应大于0;

    展开全文
  • 案例查看地址:点击这里&lt;!doctype html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content="wid
  • 程序模拟分页系统的地址变换过程

    万次阅读 2015-11-29 21:33:23
    注:下面分析都是建立在基本分页存储管理方式的基本地址变换机构基础之上的。 题目: 某系统程序空间与物理空间都是2GB,页面大小为4KB。已知某进程的页表如下,请编写程序模拟分页系统的地址变换过程。 其实...
  • 如果左图是分段存储管理系统的地址变换机构,那么3号段对应的基址是12,而段内偏移是586,故12~12+586都属于3号段 但是,1号段和4号段的基址是15和20,也在3号段内,矛盾了,所以左图是页式存储,右图是段式存储 ...
  • OpenCV-图片几何变换

    2019-07-26 22:27:14
    原文地址 缩放、裁剪、平移、镜像、旋转、仿射变换、透视变换。 OpenCV 提供了两个变换函数:cv2.warpAffine 和 cv2.warpPerspective,使用这两个函数可以实现所有类型的变换。 cv2.warpAffine 接收的参数是 2 * 3 ...
  • 二维图片的矩阵变换

    2019-06-15 19:33:06
    原文地址:原文地址 二维图形基本几何变换是指相对于坐标原点和坐标轴进行的几何变换,包括平移(Translate)、比例(Scale)、旋转(Rotate)、反射(Reflect)和错切(shear)5种变换。物体变换物体变换是通过...
  • 前面一篇文章我讲解了Python图像...同时,该部分知识均为杨秀璋查阅资料撰写,转载请署名CSDN+杨秀璋及原地址出处,谢谢!! 1.图像傅里叶变换 2.Numpy实现傅里叶变换 3.Numpy实现傅里叶逆变换 4.OpenCV实现傅里叶变换
  • 图像融合-小波变换

    千次阅读 2019-03-16 08:18:36
    % 函数x=wtfusion(x1,x2,N,wname)将两幅原图像x1,x2进行基于小波变换的图像融合,得到融合后的图像y % 近似分量采用加权平均的融合规则,各细节分量采用基于区域特性量测的融合规则 %输入参数: % x1----输入原图像1...
  • 经常在QQ空间中看到,好友们转载的日志,上面的图片可以看到你... 有些朋友可能已经想到了HTTP_REFERER,根据来源地址获取访问者的QQ号码,然后再调用腾讯的接口获取个人信息,度娘一下,可以找到这个接口:http://ba...
  • 图像配准指北https://zhuanlan.zhihu.com/p/128986006已更新Github地址。若觉得有用,欢迎使用、引用和进一步联系交流。谢谢!----一、背景介绍可见光与红外图像融合(Visible and infrared image fusion)是图像融合...
  • 在网上看到很多关于傅里叶变换的内容, 但是没找到具体工程上完整的一个例子例如把一个纹理转化为频谱和相位 然后利用频谱和相位在转化回来于是就自己做一个好了如果有不对之处请使劲喷然后如果你比较熟悉只想看...
  • 采用多道程序设计思想设计一个程序,模拟页式存储管理地址变换的过程,可采用FIFO、LRU、LFU、OPT四种页面置换算法。使用的相关的开发软件为NetBeans IDE 8.2。 解决的主要问题: (1)需要建立访问页表线程、访问快...
  • 源码下载简介 VC++ 小波变换的图像压缩,基于小波变换的彩色图像压缩。。 源码下载地址:点击下载 备用下载地址:点击下载
  • 图像仿射变换共有“旋转”、“平移”、“错切(shear)”、“缩放”、“翻转”5种。...keras-retinanet官方地址:https://github.com/fizyr/keras-retinanet.git 以上五种仿射变换位于utils/tran...
  • Unity游戏研发Transform场景物体的变换知识体系: 知识体系绘制的根据为极客学院的Unity教程,视频学习地址(该视频为免费学习视频): https://www.jikexueyuan.com/path/unity3d ......
  • 中学数学中会学到三角函数的相关知识,其中函数图像之间的变换是需要重点掌握的,正弦型函数的图像变换是三角...几何画板正弦型函数图像变换课件模板样: 几何画板课件模板——动态演示正弦型函数图像变换 在该...
  • 二值图像的距离变换研究

    千次阅读 2017-03-09 13:52:50
    原文地址 [研究内容] 二值图像距离变换 [正文] 二值图像距离变换的概念由Rosenfeld和Pfaltz于1966年在论文[1]中提出,目前广泛应用于计算机图形学,目标识别及GIS空间分析等领域,其主要思想是通过表识空间点...
  • OpenCV笔记:图像大小变换 文章源地址:http://hi.baidu.com/gilbertjuly/blog/item/25e4cd3f08ee733471cf6c82.html 程序中对函数不明白推荐参考这个chm文档,www.opencv.org.cn/index.php/Download,...
  • 人工智能学习离不开实践的验证,...如果需要处理的原及代码,请移步小编的GitHub地址  传送门:请点击我  如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice  下面主要学习图像灰度化...
  • 基于ArcGIS的地图投影变换展示程序 该程序是基于ArcObjects 开发的,用于演示各种投影变换的程序。该程序允许用户设置墨卡托投影、哈默爱...下载地址: https://download.csdn.net/download/mailtogst/12668274 ...
  • 文章《Text Generation from Knowledge Graphs with Graph Transformers Normalization》提出一种基于知识图变换网络的方法,实现了文献摘要的自动生成。利用知识结构,描述想要表达的多句文本的结构信息。...
  • //所有图片地址的前面相同的部分,要根据实际修改这个值。var imgname2=".jpg"; //图片的文件格式,可根据实际情修改,前面那个小点不要漏了。var imgnub=3; //要展示的图片的张数,根据实际修改此值。function ...
  • github地址:https://github.com/2209520576/Image-Processing-Algorithm 一.写在前面 几何空间变换是图像处理中的最基础的算法,主要包括图像的旋转,平移,缩放,偏移,组合变换等等,在冈萨雷斯的数字图像处理...
  • 从入门到高手,让你21天成为VB.NET高手的源代码哦,我就不必把代码写...下载地址:源代码:59_变换图像<!--google_ad_client = "pub-8333940862668978";/* 728x90, 创建于 08-11-30 */google_ad_slot = "4485230109";g
  • python 图片变换,水平镜像翻转

    千次阅读 2019-07-10 18:36:25
    from PIL import Image import os dir_img = "/home/li/PycharmProjects/HED-BSDS/train/aug_gt_scale_0.5/337....#待处理的图片地址 dir_save = "/home/li/PycharmProjects/HED-BSDS/train/aug_gt_scale_0.5/337.5...
  • 代码中蓝色部分为图片地址,可以替换自己制作的存放在图片空间中的轮播。红色部分为图片所示宝贝的详情页面。 备注:此代码在IE浏览器上不能复制时,可选择其他浏览器,比如谷歌浏览器。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,085
精华内容 434
关键字:

地址变换图