[原]opencv圖像裁剪


opencv圖像裁剪


在圖像處理中,我們經常根據需要截取圖像中某一區域做處理,而不是針對整幅圖像,這樣會提高運算速度。當然,opencv有現成的截取函數供我們調用,但是考慮的運行平台不同(DSP芯片移植等),直接調用函數不現實。小生針對這一情況做了以下工作,不調用相關函數,截取到指定位置指定大小的圖像,希望大家批評指正。

c++代碼:

#include "stdafx.h"  
#include "cv.h"  
#include "highgui.h"  
  
int myCutOut(IplImage* src, IplImage* dst, int x, int y, int w, int h)  
{  
    //x,y為矩形框左上角點坐標,w為寬度,h為高度  
    int width_src = src->widthStep;  
    int height_src = src->height;  
    byte* gray_src = (byte*)src -> imageData;  
  
    int width_dst = dst ->widthStep;  
    int height_dst = dst ->height;  
    byte* gray_dst = (byte*)dst -> imageData;  
  
    for (int i = 0; i < height_dst; i++)  
    {  
        for (int j = 0; j < width_dst; j++)  
        {  
            gray_dst[i * width_dst + j] = gray_src[(y + i) * width_src + x + j];  
        }  
    }  
  
    return 0;  
}  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    IplImage* Img_src = cvLoadImage("lena.bmp", -1);   
    //目標大小為150x50  
    IplImage* Img_dst = cvCreateImage(cvSize(150,50),IPL_DEPTH_8U,Img_src->nChannels);  
    //起始點坐標為(250,250)  
    myCutOut(Img_src, Img_dst, 250, 250, Img_dst -> width, Img_dst -> height);  
  
    cvShowImage("src", Img_src);  
    cvShowImage("cutout", Img_dst);  
    cvWaitKey(0);  
  
    return 0;  
}  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM