图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601
本文参考博文/wangguchangqing/p/4039095.html
本文向大家提供三个源码,分别为:
①基于OpenCV1.x写的水平镜像变换C源码
②基于OpenCV1.x写的竖直镜像变换C源码
③基于OpenCV2.x写的包含水平翻转、垂直翻转、同时进行垂直和水平翻转的C++源码。
①基于OpenCV1.x写的水平镜像变换C源码(不使用MAT类)::
源码中用到的图像下载链接:/s/1bo5zC2F
#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;}
②基于OpenCV1.x写的竖直镜像变换C源码(不使用MAT类):
源码中用到的图像下载链接:/s/1bo5zC2F
#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;}
运行结果如下图所示:
③基于OpenCV2.x写的包含水平翻转、垂直翻转、同时进行垂直和水平翻转的C++源码(使用MAT类)
代码中用到的图像下载链接/s/1dFv2MM9
//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