2. 把一幅图像进行平移。
实验二 #include "cv.h" #include<stdio.h> #include "highgui.h" IplImage *PingYi(IplImage *src, int h0, int w0); int main(int argc, char** argv) { IplImage* pImg; //声明IplImage指针 IplImage* pImgAfterMove; pImg = cvLoadImage("6013202130.jpg"); pImgAfterMove = cvCloneImage(pImg); cvSetZero(pImgAfterMove); pImgAfterMove = PingYi(pImg, 100, -100); cvNamedWindow("原图", CV_WINDOW_AUTOSIZE); cvShowImage("原图", pImg); cvNamedWindow("移动后", CV_WINDOW_AUTOSIZE); cvShowImage("移动后", pImgAfterMove); cvWaitKey(0); //等待按键 cvDestroyWindow("aa");//销毁窗口 cvDestroyWindow("bb"); cvReleaseImage(&pImg); //释放图像 cvReleaseImage(&pImgAfterMove); return 0; } //该函数的功能是实现图像的平移 //规定向下、向右为(正,正) IplImage *PingYi(IplImage *src, int h0, int w0) { int h = h0; int w = w0; int imageHeight = src->height; int imageWidth = src->width; int i, j; CvScalar sTemp; IplImage *dst = cvCloneImage(src); cvSetZero(dst); if (h >= 0 && w >= 0) { // for (i = 0; i<imageHeight - h; i++) { for (j = 0; j<imageWidth - w; j++) { sTemp = cvGet2D(src, i, j); cvSet2D(dst, i + h, j + w, sTemp); } } } else if (h<0 && w >= 0) { for (i = -h; i<imageHeight; i++) { for (j = 0; j<imageWidth - w; j++) { sTemp = cvGet2D(src, i, j); cvSet2D(dst, i + h, j + w, sTemp); } } } else if (h >= 0 && w<0) { for (i = 0; i<imageHeight - h; i++) { for (j = -w; j<imageWidth; j++) { sTemp = cvGet2D(src, i, j); cvSet2D(dst, i + h, j + w, sTemp); } } } else if (h<0 && w<0) { for (i = -h; i<imageHeight; i++) { for (j = -w; j<imageWidth; j++) { sTemp = cvGet2D(src, i, j); cvSet2D(dst, i + h, j + w, sTemp); } } } else { printf("无法移动哦!"); dst = cvCloneImage(src); } return dst;
声明:
博主是原悦乎教程网站长,博主写博客花费了大量精力,我的博客欢迎转载共享,但在 同时,希望保留我的署名权,不得用于商业用途。转载时请注明转载地址。未经特别说明,均采用“署名-非商业性使用-禁止演绎 2.5 中国大陆”授权。任何违反本协议的行为均属于非法行为。