CImage图像旋转与缩放
void ImageScale(CImage *dst, CImage *src, double alpha) //非整数倍缩放
{int nSize; BYTE **list, *sc ,*lp; int Dx, Dy, x, y, bpd; Dx=(int)(alpha * src->GetWidth()); //计算结果位图宽度 Dy=(int)(alpha * src->GetHeight()); //计算结果位图高度 dst -> Destroy(); dst ->Create(Dx, Dy, src->GetBPP() ); //建立结果位图 bpd = src->GetBPP()/8; //每个画素占字节nSize = (Dx * src->GetBPP() + 31) / 32 * 4; //计算工作单元大小 sc = (BYTE*) malloc(nSize); //申请像素行工作单元 list = (BYTE**) malloc(src->GetHeight() * sizeof(BYTE*)); // 申请指针数组 for (int i=0;i<src->GetHeight();i++) list[i] = (BYTE*) src->GetPixelAddress(0, i); //生成二维数组 for (int j=0;j<Dy;j++) { y=int(j/alpha+0.5);for (int i=0;i<Dx;i++) { x=int(i/alpha+0.5); //x1,y1为整数部分 if (x>src->GetWidth()||y>src->GetHeight()) // 范围检查 {continue; }if(x==src->GetWidth()) x--;if(y==src->GetHeight()) y--;memcpy(&sc[i*bpd],&list[y][x*bpd],bpd); //从源位图复制像素数据 }lp=(BYTE*)dst->GetPixelAddress(0,j); //处理结果总结果位图 memcpy(lp,sc,Dx*bpd); }free(sc); //释放工作单元 free(list);
}
void ImageRotation(CImage *dst, CImage *src, double alpha)
{int ww, Dx, Dy, bpd; double centerx, centery, sintheta, costheta; double X1, Y1, X2, Y2, theta, xx, yy, rr; BYTE **list, *sc, *lp; int x, y; Dx=src->GetWidth(); Dy=src->GetHeight(); sc=(BYTE*)malloc(2*(Dx*src->GetBPP()+31)/32*4); //申请工作单元 list=(BYTE**)malloc(Dy*sizeof(BYTE*)); //对原位图建立二维数组 for (int i=0;i<Dy;i++) {list[i]=(BYTE*)src->GetPixelAddress(0, i); }centerx=Dx/2.0+0.5; //计算位图中心位置 centery=Dy/2.0+0.5; rr=sqrt(centerx*centerx+centery*centery); //计算对角线长度 theta=atan(centery/centerx); X1=fabs(rr*cos(alpha+theta))+0.5; Y1=fabs(rr*sin(alpha+theta))+0.5; X2=fabs(rr*cos(alpha-theta))+0.5; Y2=fabs(rr*sin(alpha-theta))+0.5; if (X2>X1) X1 = X2; //得外接矩形宽度 if (Y2>Y1) Y1 = Y2; //外接矩形高度 ww=(int)(2 * X1); dst->Destroy(); dst->Create(ww,(int)(2*Y1),src->GetBPP()); //建立结果位图 bpd = src->GetBPP()/8;sintheta = sin(alpha); costheta = cos(alpha); for (int j=(int)(centery-Y1),Yd=0;j<=(centery + Y1);j++,Yd++) { if (src->GetBPP()==8) memset(sc,255,ww); //256色位图像素行置背景值 else memset(sc,255,ww*bpd); //真彩色位图像素行置背景值 for (int i=(int)(centerx-X1),Xd=0;i<=centerx+X1;i++,Xd+=bpd) { xx=centerx+costheta*(i-centerx)+sintheta*(j-centery); yy=centery-sintheta*(i-centerx)+costheta*(j-centery); x=(int)(xx+0.5); y=(int)(yy+0.5); if (x<0||x>= src->GetWidth()||y<0||y>=src->GetHeight()) continue; if(x==src->GetWidth()) x--;if(y==src->GetHeight()) y--;memcpy(&sc[Xd],&list[y][x*bpd],bpd); //从源位图复制像素数据 } lp=(BYTE*)dst->GetPixelAddress(0,Yd); //处理结果总结果位图 memcpy(lp,sc,ww*bpd);} free(list); //释放工作单元 free(sc);
}
CImage图像旋转与缩放相关推荐
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移...
常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...
- HTML5图片旋转并保存,html5图像旋转、缩放并上传
普通 css 的旋转缩放只是样式发生旋转,图片本质上还是没有旋转缩放的,想要图片本质旋转或者缩放,需要借助 canvas 的图像生成能力 以图像旋转 90 度并且缩放 0.5 倍为例 思路获取图片元素 ...
- 数据增强之图像旋转及坐标对应(附代码)
海康威视研究院ImageNet2016竞赛经验分享 深度学习之图像的数据增强 data augmentation 数据增强方法总结 图片的数据增强(Data Augmentation)方法 openc ...
- opencv 图像旋转_用Dlib和OpenCV还能做什么?这个开源项目实现了驾驶员疲劳检测...
Dlib 和 OpenCV 这两个库已经在深度学习和人脸识别领域逐渐有了自己的一席之地,基于它们的各种开源项目的越来越多,今天 Gitee 上这个开源项目也是基于 Dlib 和 OpenCV 的,具体 ...
- python函数图像平移_[Python图像处理]六.图像缩放,图像旋转,图像翻转与图像平移...
图像缩放 图像缩放主要是调用resize()函数实现,result = cv2.resize(src, dsize[, result[.fx, fy[,interpolation]]]) 其中src ...
- opencv python 图像缩放/图像平移/图像旋转/仿射变换/透视变换
Geometric Transformations of Images 1图像转换 OpenCV提供了两个转换函数cv2.warpAffine和cv2.warpPerspective,可以使用它们进行 ...
- python如何移动图片_python之详细图像仿射变换讲解(图像平移、旋转、缩放、翻转),一文就够了,赶紧码住...
仿射变换简介 什么是放射变换 图像上的仿射变换, 其实就是图片中的一个像素点,通过某种变换,移动到另外一个地方. 从数学上来讲, 就是一个向量空间进行一次线形变换并加上平移向量, 从而变换到另外一个向 ...
- OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小. API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参 ...
- MFC空间几何变换之图像平移、镜像、旋转、缩放
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形 ...
最新文章
- iOS使用支付宝支付步骤
- STM32按键控制led四种方法
- Linux服务器集群系统(一)--转
- win10蓝屏提示重新启动_Windows 10系统出现蓝屏、CPU占用高,你们是如何解决的?...
- Java中集合中根据对象的某个属性去重
- SpringBoot-@Conditional
- 知识主题间先序关系挖掘
- 6.2二叉树及二叉树存储结构
- Python 函数(参数组合)
- 手机上有没有学python的软件-有哪些可以在手机上敲Python代码的App
- std::thread的使用
- 凸优化第二章凸集 2.2重要例子
- Raki的读paper小记:FLAT: Chinese NER Using Flat-Lattice Transformer
- ModelSim的使用详解
- Windows聚焦壁纸保存方法
- html背景色不透明度,css怎么设置颜色不透明度?
- 现在大多数论文存在的弊病——可重复性
- 300行python代码从零开始构建基于知识图谱的电影问答系统4-用户问题预处理
- GitHub 上100个优质前端项目整理,非常全面!
- Android notes