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; }