zoukankan      html  css  js  c++  java
  • 图像处理之规则裁剪(Resize)

    1 图像裁剪

          在实际工作中,经常需要根据研究工作要求对图像进行裁剪(Subset Image),按照实际图像分幅裁剪的过程,可以将图像分幅裁剪分为两种类型:规则分幅裁剪(Rectangle Subset),不规则分幅裁剪(Pdygon Subset)。

          规则分幅裁剪:裁剪图像的边界范围是一个矩形,通过左上角和右下角两点的坐标,就可以确定图像的裁剪位置,整个裁剪过程比较简单。

          不规则分幅裁剪:裁剪图像的边界范围是任意多边形,无法通过左上角和右下角两点的坐标确定裁减位置,而必须事先生成一个完整的闭合多边形区域,可以是一个AOI多边形,也可以是ArcInfo的一个Polygon Coverage,针对不同的情况采用不同的裁剪过程。

    2 源码实现(C语言)

          由于不规则分幅裁剪比较复杂,在常规图像处理中并不常见,因此我们通常进行的是规则分幅裁剪,如下是利用C实现的图像规则裁剪,源码如下:

     1     #include "stdafx.h"    
     2     #include "cv.h"    
     3     #include "highgui.h"    
     4         
     5     int myCutOut(IplImage* src, IplImage* dst, int x, int y, int w, int h)    
     6     {    
     7         //x,y为矩形框左上角点坐标,w为宽度,h为高度    
     8         int width_src = src->widthStep;    
     9         int height_src = src->height;    
    10         byte* gray_src = (byte*)src -> imageData;    
    11         
    12         int width_dst = dst ->widthStep;    
    13         int height_dst = dst ->height;    
    14         byte* gray_dst = (byte*)dst -> imageData;    
    15         
    16         for (int i = 0; i < height_dst; i++)    
    17         {    
    18             for (int j = 0; j < width_dst; j++)    
    19             {    
    20                 gray_dst[i * width_dst + j] = gray_src[(y + i) * width_src + x + j];    
    21             }    
    22         }    
    23         
    24         return 0;    
    25     }    
    26         
    27     int _tmain(int argc, _TCHAR* argv[])    
    28     {    
    29         IplImage* Img_src = cvLoadImage("lena.bmp", -1);     
    30         //目标大小为150x50    
    31         IplImage* Img_dst = cvCreateImage(cvSize(150,50),IPL_DEPTH_8U,Img_src->nChannels);    
    32         //起始点坐标为(250,250)    
    33         myCutOut(Img_src, Img_dst, 250, 250, Img_dst -> width, Img_dst -> height);    
    34         
    35         cvShowImage("src", Img_src);    
    36         cvShowImage("cutout", Img_dst);    
    37         cvWaitKey(0);    
    38         
    39         return 0;    
    40     }    

             仿真效果图如下:

             输入图片:

            

             输出图片:

            

  • 相关阅读:
    Java中类的继承
    信号量、PV原语及其应用
    Python-subprocess执行命令并将输出劫持实现实时记录到日志
    Python-logging模块定制格式描述符实现定长日志等级
    Python-logging模块实现同时向控制台和文件打印日志
    SpringBoot学习笔记(二)
    Kubernetes学习日记(四)
    Kubernetes学习日记(三)
    SpringBoot学习笔记(一)
    Kubernetes学习日记(二)
  • 原文地址:https://www.cnblogs.com/qiqibaby/p/8626516.html
Copyright © 2011-2022 走看看