首页 > 编程知识 正文

python范围缩放(opencv图像缩放)

时间:2023-05-04 01:55:17 阅读:74730 作者:3145

单击打开链接(2011-10-09 19:12:51 )转载标签: it分类:多媒体(图形图像/音视频)//Resize CImage

voidcreatestretchimage (cimage * pimage、CImage *ResultImage、int StretchHeight、int StretchWidth ) {

if(pimage-isdibsection () ) )

获取pImage的直流

CDC * pimage DC1=CDC :3360 from handle (pimage-getdc (); //Image有自己的直流,必须使用FromHandle获取相应的直流

cbitmap * bitmap1=pimage DC1- getcurrentbitmap (;

位图BMP info;

位图1 -千兆位图(BMP info );

//创建新的CImage

结果图像-创建(stretch width,StretchHeight,bmpInfo.bmBitsPixel );

CDC * resultimagedc=CDC :3360 from handle (result image-getdc );

如果目标小时,则根据目标直流的拉伸蓝牙BLT模式,决定是否保持被删除的点的信息

resultimagedc-setstretchbltmode; //使用最高质量的方式

:3360 setbrushorgex (resultimagedc-m _ hdc,0,0,NULL ); 调整浏览的起点

将pImage绘制在结果图像上

stretchblt(*resultimagedc,0,0,StretchWidth,StretchHeight,* pimage DC 1,0,0,pImage-GetWidth ),pimage-getwid

//pimage-draw(*resultimagedc,0,0,StretchWidth,StretchHeight,0,0,pImage-GetHeight ),pImage-GetHeight

pImage-ReleaseDC (;

结果图像- releasedc (;

}

}

//创建指定大小的图形

如果输入:元的图形文件=pBitmap并指定大小=StretchHeight StretchWidth,则生成的图形文件=pResultBmp

//Usage:

voidreatestretchbmp (cbitmap * pbitmap,int StretchHeight,int StretchWidth,CBitmap *pResultBmp ) }

//制作显示监视器的直流

CDC直流屏幕;

DC screen.attach (:3360 getdc (null );

//获取原始图形文件的直流

CDC直流内存;

DC内存. createcompatibledc (DC屏幕;

cbitmap * poldorgbitmap=DC memory.select object (pbitmap );

//创建新的结果图表(指定大小)

presult BMP-createcompatiblebitmap (DC screen,StretchWidth,StretchHeight );

//获取结果图表的直流

CDC dcFixMemory;

cfixmemory.createcompatibledc (DC屏幕;

cbitmap * poldreslutbitmap=dcfixmemory.select object (presult BMP ); 如果选择//dcFixMemory中的“结果bmp”,则dcfixmemory的所有操作都将反映在pResultBmp中

//将原始图形缩放到内存直流上绘制

位图BMP info;

位图-千兆位图(BMP info; //获取原始图形文件的宽度和高度

stretchblt(dcfixmemory,0,0,StretchWidth,StretchHeight,dcMemory,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,

//Set Back

DC memory.select object (poldorgbitmap;

dfixmemory.select object (poldreslutbitmap;

}

那位朋友使用过画行缩放的插值算法。 我本来的做法是把整个图像的内容读入内存,用插值算法进行缩放。 但是,我现在需要内存优化,所以源数据需要一行一行地读。 我的想法是读一行数据,用插值算法转换一次,但是插值算法需要参考周围四点的数据进行插值,所以我不确定我现在的想法是否可行。 有谁做过这个工作吗?

放大或缩小整个图像的代码如下。

unsigned char * HCN image :3360 do _ stretch _ linear (intw _ dest,int h_Dest,int bit_depth,unsigned char *src

{

int sw=w_Src-1,sh=h_Src-1,dw=w_Dest-1,dh=h_Dest-1;

int B,n,x,y;

int nPixelSize=bit_depth/8;

无符号char * pline prev,*pLineNext;

统一char * pdest=newunsignedchar [ w _ dest * h _ dest * bit _ depth/8 ];

无符号char * tmp;

无符号char * pa、*pB、*pC、*pD;

for(intI=0; i=dh; I )

{

tmp=pDest i*w_Dest*nPixelSize;

y=i*sh/dh;

N=dh - i*sh%dh;

plineprev=src(y ) *w_Src*nPixelSize;

plinenext=(n==DH )? pline prev : srcy * w _ src * npixelsize;

for(intj=0; j=dw; j )

{

x=j*sw/dw*nPixelSize;

B=dw-j*sw%dw;

pA=pLinePrev x;

pB=pA nPixelSize;

pC=pLineNext x;

pD=pC nPixelSize;

if(b==dw ) )。

{

pB=pA;

pD=pC;

}

for(intk=0; knPixelSize; k )

{

* tmp=(未指定的char ) (int ) (

(b*n* ) ) pa-*Pb-*PC*PD ) dw * N * *pB

DH*B**PC(dw*DH-DH*B-dw*n ) * *pD

dw*DH/2(/) dw*DH );

}

}

}

返回深度;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。