700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码

用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码

时间:2021-09-20 06:17:15

相关推荐

用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782

图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

直接上源码,本人是参考博文的源码OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1) - Brook_icv - 博客园改写而成的!

源码中用到的图像下载地址:lena_gray.png_免费高速下载|百度网盘-分享无限制

首先是水平镜像变换的C源码(不使用MAT类)::

#include <opencv2/opencv.hpp> #include <opencv2/legacy/compat.hpp> #include <fstream>using namespace std; #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") void mirror_horizontally_image(IplImage *src,IplImage *dst) //实现水平镜像变换{int M,N;M=src->height;N=src->width;int i=0,j=0;double temp1;CvScalar s1;for(i=0;i<M;i++){for(j=0;j<N;j++){temp1 = cvGet2D(src,i,N-1-j).val[0];s1.val[0]=temp1;cvSet2D(dst,i,j,s1);}}}int main(){IplImage *pSrcImage = cvLoadImage("lena_gray.png", CV_LOAD_IMAGE_UNCHANGED); IplImage *pOutImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);mirror_horizontally_image(pSrcImage,pOutImage);const char *pstrWindowsATitle = "原图"; const char *pstrWindowsBTitle = "变换后的图"; //创建窗口cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE);cvNamedWindow(pstrWindowsBTitle, CV_WINDOW_AUTOSIZE);//在指定窗口中显示图像cvShowImage(pstrWindowsATitle, pSrcImage); cvShowImage(pstrWindowsBTitle, pOutImage); //等待按键事件cvWaitKey();cvDestroyWindow(pstrWindowsATitle); cvDestroyWindow(pstrWindowsBTitle); cvReleaseImage(&pSrcImage); cvReleaseImage(&pOutImage); return 0;}

其次是竖直镜像变换的C源码(不使用MAT类)::

#include <opencv2/opencv.hpp> #include <opencv2/legacy/compat.hpp> #include <fstream>using namespace std; #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") void mirror_vertically_image(IplImage *src,IplImage *dst) //实现竖直镜像变换{int M,N;M=src->height;N=src->width;int i=0,j=0;double temp1;CvScalar s1;for(i=0;i<N;i++){for(j=0;j<M;j++){temp1 = cvGet2D(src,N-1-j,i).val[0];s1.val[0]=temp1;cvSet2D(dst,j,i,s1);}}}int main(){IplImage *pSrcImage = cvLoadImage("lena_gray.png", CV_LOAD_IMAGE_UNCHANGED); IplImage *pOutImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);mirror_vertically_image(pSrcImage,pOutImage);const char *pstrWindowsATitle = "原图"; const char *pstrWindowsBTitle = "变换后的图"; //创建窗口cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE);cvNamedWindow(pstrWindowsBTitle, CV_WINDOW_AUTOSIZE);//在指定窗口中显示图像cvShowImage(pstrWindowsATitle, pSrcImage); cvShowImage(pstrWindowsBTitle, pOutImage); //等待按键事件cvWaitKey();cvDestroyWindow(pstrWindowsATitle); cvDestroyWindow(pstrWindowsBTitle); cvReleaseImage(&pSrcImage); cvReleaseImage(&pOutImage); return 0;}

运行结果如下图所示:

再次是水平翻转、垂直翻转、垂直和水平翻转的C++源码(使用MAT类)::

代码中用到的图像下载链接pool.jpg_免费高速下载|百度网盘-分享无限制

//OpenCV版本2.4.9 //交流QQ2487872782 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp> int main() { cv::Mat srcImage = cv::imread("pool.jpg");if(!srcImage.data)return -1; // 水平翻转cv::Mat resultImage2;cv::flip(srcImage, resultImage2, 1); // 垂直翻转cv::Mat resultImage3;cv::flip(srcImage, resultImage3, 0);// 垂直和水平翻转cv::Mat resultImage4;cv::flip(srcImage, resultImage4, -1);cv::imshow("srcImage", srcImage); cv::imshow("水平翻转后的图像", resultImage2); cv::imshow("垂直翻转后的图像", resultImage3); cv::imshow("垂直和水平翻转后的图像", resultImage4); cv::waitKey(0); return 0; }

运行结果如下图所示:

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782

图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。