⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imgprocessing.cpp

📁 数字图像处理的程序
💻 CPP
字号:
#include "stdafx.h"
#include "imgProcessing.h"
#include <math.h>


BOOL imageMoving(CDIB& img,int mx,int my)
{
	int w,h;
    int i,j,u,v;

    CDIB img_o;

    if(img.getDIB()==NULL) return false;

    img_o=img;
    w=img.getDIB()->w;
    h=img.getDIB()->h;

    //---------------------------------------------------
    //img初始化
    for(j=0;j<h;j++){
        for(i=0;i<w;i++){
            img.pix24(i,j).B=0;
            img.pix24(i,j).G=0;
            img.pix24(i,j).R=0;
        }
    }

    //--------------------------------------------------
    //图像平移
    for(j=0;j<h;j++){
        for(i=0;i<w;i++){
            u=i-mx;
            v=j-my;
            if(u>=0 && u<w && v>=0 && v<h){
                img.pix24(i,j).B=img_o.pix24(u,v).B;
                img.pix24(i,j).G=img_o.pix24(u,v).G;
                img.pix24(i,j).R=img_o.pix24(u,v).R;
            }
        }
    }

    return true;
}

BOOL scale_zeroOrder(CDIB& img,float k_x,float k_y)
{
    int w,h;
    int i,j,u,v;
    double uu,vv;

    CDIB img_o;

    if(img.getDIB()==NULL) return false;

    img_o=img;
    w=img.getDIB()->w;
    h=img.getDIB()->h;

    //---------------------------------------------------
    //img初始化
    for(j=0;j<h;j++){
        for(i=0;i<w;i++){
            img.pix24(i,j).B=255;
            img.pix24(i,j).G=255;
            img.pix24(i,j).R=255;
        }
    }

    //--------------------------------------------------
    //图像放大
    for(j=0;j<h;j++){
        for(i=0;i<w;i++){
            uu=i/k_x;
            vv=j/k_y;
            u=(int)ceil(uu+0.5);
            v=(int)ceil(vv+0.5);
            if(u>=0 && u<w && v>=0 && v<h){
                img.pix24(i,j).B=img_o.pix24(u,v).B;
                img.pix24(i,j).G=img_o.pix24(u,v).G;
                img.pix24(i,j).R=img_o.pix24(u,v).R;
            }
        }
    }

    return true;
}

BOOL scale_oneOrder(CDIB& img,float k_x,float k_y)
{
    int w,h;
    int i,j,u,v;
    double uu,vv;

    CDIB img_o;

    img_o=img;
    w=img.getDIB()->w;
    h=img.getDIB()->h;

    //---------------------------------------------------
    //img初始化
    for(j=0;j<h;j++){
        for(i=0;i<w;i++){
            img.pix24(i,j).B=255;
            img.pix24(i,j).G=255;
            img.pix24(i,j).R=255;
        }
    }

    //--------------------------------------------------
    //图像放大
    double a,b,g1,g2,tmp;

    for(j=0;j<h;j++){
        for(i=0;i<w;i++){
            uu=i/k_x;
            vv=j/k_y;
            u=(int)ceil(uu);
            v=(int)ceil(vv);
            a=uu-u;
            b=vv-v;
            if(u>=0 && u<w && v>=0 && v<h){
                g1=a*(img_o.pix24(u+1,v).B-img_o.pix24(u,v).B)+img_o.pix24(u,v).B;
                g2=a*(img_o.pix24(u+1,v+1).B-img_o.pix24(u,v+1).B)+img_o.pix24(u,v+1).B;
                tmp=b*(g2-g1)+g1;
                if(tmp<0.0) tmp=0.0;
                if(tmp>255.0) tmp=255.0;
                img.pix24(i,j).B=(unsigned char)tmp;
                   
                g1=a*(img_o.pix24(u+1,v).G-img_o.pix24(u,v).G)+img_o.pix24(u,v).G;
                g2=a*(img_o.pix24(u+1,v+1).G-img_o.pix24(u,v+1).G)+img_o.pix24(u,v+1).G;
                tmp=b*(g2-g1)+g1;
                if(tmp<0.0) tmp=0.0;
                if(tmp>255.0) tmp=255.0;
                img.pix24(i,j).G=(unsigned char)tmp;

                g1=a*(img_o.pix24(u+1,v).R-img_o.pix24(u,v).R)+img_o.pix24(u,v).R;
                g2=a*(img_o.pix24(u+1,v+1).R-img_o.pix24(u,v+1).R)+img_o.pix24(u,v+1).R;
                tmp=b*(g2-g1)+g1;
                if(tmp<0.0) tmp=0.0;
                if(tmp>255.0) tmp=255.0;
                img.pix24(i,j).R=(unsigned char)tmp;
             /*   
                tmp=(1-a)*(1-b)*img_o.pix24(u,v).B+a*(1-b)*img_o.pix24(u,v+1).B+(1-a)*b*img_o.pix24(u+1,v).B+a*b*img_o.pix24(u+1,v+1).B;
                if(tmp>255.0) tmp=255.0; 
                if(tmp<0.0) tmp=0.0;
                img.pix24(i,j).B=(unsigned char)tmp;

              
                tmp=(1-a)*(1-b)*img_o.pix24(u,v).G+a*(1-b)*img_o.pix24(u,v+1).G+(1-a)*b*img_o.pix24(u+1,v).G+a*b*img_o.pix24(u+1,v+1).G;
                if(tmp>255.0) tmp=255.0; 
                if(tmp<0.0) tmp=0.0;
                 img.pix24(i,j).G=(unsigned char)tmp;
                
                tmp=(1-a)*(1-b)*img_o.pix24(u,v).R+a*(1-b)*img_o.pix24(u,v+1).R+(1-a)*b*img_o.pix24(u+1,v).R+a*b*img_o.pix24(u+1,v+1).R;
                if(tmp>255.0) tmp=255.0; 
                if(tmp<0.0) tmp=0.0;
       
                img.pix24(i,j).R=(unsigned char)tmp;
               */ 
            }
        }
    }

    return true;
}
BOOL imageRotate(CDIB& img,double angle )
{
	int lwidth ,lheight,newwidth,newheight,linebytes,newlinebytes,i,j,k;
	float fangle; 
	int i0 , j0 ; 
	double fsina , fcosa , f1 , f2; 
	double fscrx1 , fscry1 , fscrx2 , fscry2 , fscrx3 , fscry3 , fscrx4 , fscry4 ; 
	double fdisx1 , fdisy1 , fdisx2 , fdisy2 , fdisx3 , fdisy3 , fdisx4 , fdisy4 ;
	CDIB img_o ; 
	if( img.getDIB() ==NULL ) return false ; 

	lwidth = img.getDIB()->w ; 
	lheight = img.getDIB()->h ; 
	fangle = (angle/180.0)* 3.1415926 ; 

	fsina  = sin(fangle) ; 
	fcosa  = cos(fangle) ; 
	fscrx1 = -(lwidth-1)/2 ; 
	fscry1 = (lheight-1)/2 ; 
	fscrx2 = (lwidth-1)/2 ;
	fscry2 = (lheight-1)/2 ; 
	fscrx3 = -(lwidth-1)/2 ; 
	fscry3 = -(lheight-1)/2 ; 
	fscrx4 = (lwidth-1)/2 ; 
	fscry4 = -(lheight-1)/2 ; 

	fdisx1 = fcosa * fscrx1 + fsina* fscry1 ; 
	fdisy1 = -fsina*fscrx1 + fcosa* fscry1 ; 
	fdisx2 = fcosa*fscrx2 + fsina*fscry2 ; 
	fdisy2 = -fsina*fscrx2 + fcosa*fscry2 ; 
	fdisx3 = fcosa*fscrx3 + fsina*fscry3 ; 
	fdisy3 = -fsina*fscrx3 + fcosa*fscry3 ; 
	fdisx4 = fcosa*fscrx4 + fsina*fscry4 ; 
	fdisy4 = -fsina*fscrx4 + fcosa*fscry4 ; 
	newwidth = fabs(fdisx4-fdisx1) > fabs(fdisx3-fdisx2)+0.5 ?fabs(fdisx4-fdisx1):fabs(fdisx3-fdisx2) +0.5 ; 
	newheight = fabs(fdisy4 - fdisy1 ) > fabs( fdisy3 - fdisy2 )+0.5 ? fabs(fdisy4 - fdisy1 ):fabs( fdisy3 - fdisy2 ) +0.5 ; 
	f1 = (-0.5)*(newwidth-1)*fcosa-0.5*(newheight-1)*fsina 
		+ 0.5 * (lwidth-1) ; 
	f2 = 0.5*(newwidth-1)*fsina - 0.5*(newheight-1)*fcosa 
		+ 0.5 *(lheight-1) ; 
	img_o.create( newwidth ,newheight  ,24) ; 
	for( i = 0 ; i < newheight ; i ++ ) 
	{
		for( j = 0 ; j < newwidth   ; j ++ )
		{
			i0 = (int)(-((float)j)*fsina + ((float)i)*fcosa+f2+0.5) ; 
			j0 = (int)(((float)j)*fcosa + ((float)i)*fsina + f1 + 0.5) ; 
			if( (j0 >= 0 ) && ( j0<lwidth)&&(i0>=0)&&(i0<lheight))
			{
				img_o.pix24(j,i).B = img.pix24(j0,i0).B;
				img_o.pix24(j,i).G = img.pix24(j0,i0).G;
				img_o.pix24(j,i).R = img.pix24(j0,i0).R;
			}
			else
			{
				img_o.pix24(j,i).B = 255;
				img_o.pix24(j,i).G =255;
				img_o.pix24(j,i).R = 255;
			}
		}
	}
	
	img = img_o ; 
	return true ; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -