《图像叠加及透明度处理》

1.图像分割

cvCopy语句实现

private: void CutImage(String^ strFilename)

         {

            String^ strPureFilename="";

            strPureFilename=strFilename->Substring(strFilename->LastIndexOf("//")+1);

            String^ strCurFolder="";

 

            IplImage* src;

            IplImage* dst;

 

            char* strtmpfile = (char*)(void*)Marshal::StringToHGlobalAnsi(strFilename);

 

            if((src=cvLoadImage(strtmpfile, CV_LOAD_IMAGE_UNCHANGED))!= 0)

            {

                String^ strSavePath="";

                String^ strObjFilename="";

                for(int k=0;k<lstFolder->Items->Count;k++)

                {

                    for(int j=0;j<2;j++)

                    {

                        CvRect roi=cvRect(j*(src->width/2),0 ,src->width/2,src->height );

 

                        // 设置ROI

                        cvSetImageROI(src,roi);

                        // 创建子图像

                        dst = cvCreateImage( cvSize(roi.width, roi.height), src->depth, src->nChannels );

                        cvCopy(src,dst);

                        cvResetImageROI(src);

 

                        strSavePath=lstFolder->Items[k]->ToString();

                        strCurFolder=txtPath->Text->Substring(txtPath->Text->LastIndexOf("//")+1);

                        if(j==0)

                        {

                            strObjFilename=strSavePath+"//"+strPureFilename->Substring(strPureFilename->IndexOf(",")-2,2) +strPureFilename;

                        }

                        if(j==1)

                        {

                            strObjFilename=strSavePath+"//"+strPureFilename->Substring(strPureFilename->IndexOf(",")+1,2) +strPureFilename;

                        }

                        char* strtemppath = (char*)(void*)Marshal::StringToHGlobalAnsi(strObjFilename);

                        cvSaveImage(strtemppath,dst);

                        cvReleaseImage(&dst);

                    }

                }

                cvReleaseImage(&src);

            }

      }

 

 

                     

                                                                     原图像

      

                       

                                 分割后图像左半部                                                分割后图像右半部

 

 

2.图像缩放

cvResize实现

private: void ZoomImage(String^ strFilename,int maxWidth)

         {

            String^ strPureFilename="";

            strPureFilename=strFilename->Substring(strFilename->LastIndexOf("//")+1);

            String^ strCurFolder="";

            String^ strSavePath="";    

            String^ strObjFilename="";

            IplImage* src;

            IplImage* dst;

            char* strtmpfile = (char*)(void*)Marshal::StringToHGlobalAnsi(strFilename);

 

            if((src=cvLoadImage(strtmpfile, CV_LOAD_IMAGE_UNCHANGED))!= 0)

            {

                int srcWidth=src->width;

                int srcHeight=src->height;

               

                //int maxWidth=377;

                int maxHeight=0;

 

                double factor=1;

                factor= (double) maxWidth/srcWidth;

                maxHeight=(int)(srcHeight*factor);

                CvSize dst_size;

                dst_size.width=maxWidth;

                dst_size.height =maxHeight;

                dst=cvCreateImage(dst_size,src->depth,src->nChannels);

                //cvResize(src,dst,CV_INTER_LINEAR);

                cvResize(src,dst,CV_INTER_AREA);

               

                strSavePath=strFilename->Substring(0,strFilename->LastIndexOf("//"));

                strCurFolder=txtPath->Text->Substring(txtPath->Text->LastIndexOf("//")+1);

 

                String^ strSeq=TrimZero(strPureFilename->Substring(0,2));

 

                //strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_" +strPureFilename->Substring(0,2) +strPureFilename->Substring(strPureFilename->LastIndexOf("."));

                strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_" +strSeq +strPureFilename->Substring(strPureFilename->LastIndexOf("."));

                if(maxWidth==BIGIMGWIDTH)

                {

                    //strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_big_" +strPureFilename->Substring(0,2) +strPureFilename->Substring(strPureFilename->LastIndexOf("."));

                    strObjFilename=strSavePath+"//"+strCurFolder->Substring(0,4)+"_big_" +strSeq +strPureFilename->Substring(strPureFilename->LastIndexOf("."));

                }

                char* strtemppath = (char*)(void*)Marshal::StringToHGlobalAnsi(strObjFilename);

 

                cvSaveImage(strtemppath,dst);

                cvReleaseImage(&dst);

                cvReleaseImage(&src);

 

                if(maxWidth==BIGIMGWIDTH)

                {

                    //加底纹

                    String^ strBackGroundPath=this->txtPath->Text->Substring(0,this->txtPath->Text->LastIndexOf("//"));

                    String^ strBackGroundFilename="底纹.png";                          

                    //AddImage(strObjFilename);

                    AddImage(strObjFilename,strBackGroundPath+"//"+strBackGroundFilename);

                    //ZoomBackGroundImage(strObjFilename);

 

                }

            }

         }

 

                     

                                    缩放后的图片

 

3.图片叠加

图片加底纹,调用其它应用程序实现,用c#编写

private: System::Void AddImage(String^ strFilename,String^ strBackgroundFilename)

         {

             String^ strCurPath = System::Environment::CurrentDirectory;

             String^ strExeFile="ImageAddBackground.exe";

             String^ strArgs="/""+strFilename+"/""+" " +"/""+strBackgroundFilename+"/"";

 

             Process::Start(strCurPath+"//"+strExeFile,strArgs);

 

         }

 

                

                                  底纹图

               

                               加底纹后的图片

 

4.生成JPG透明叠加图片原理

A.      先由JPGPNG文件叠加成PNG文件

B.      PNG文件显示再PictureBox控件内

C.      PictureBox控件的图片重绘生成BMP图片

D.      BMP图片显示再PictureBox控件内

E.       PictureBox控件内的图片另存为JPG文件

 

            string imgPath=generateWinterMark(CurrentDirectory, body_path, FaImage);

            pictureBox1.Load(imgPath);

           

 

            Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);

            pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);

            bmp.Save(CurrentDirectory + "//1.bmp");

            pictureBox1.Load();   //释放文件进程

 

            pictureBox1.Load(CurrentDirectory + "//1.bmp");

            pictureBox1.Image.Save(gParameter.strForeFilename, ImageFormat.Jpeg);

            pictureBox1.Load();   //释放文件进程

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值