用Opencv实现简单的图片翻页

来源:互联网 发布:网络套路是什么意思 编辑:程序博客网 时间:2024/05/17 20:35

本文主要介绍用Opencv实现简单的图片翻页。下面是具体的代码实现。

#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include "vector"using namespace cv;using namespace std;#define WINDOW_NAME  "【翻书】"//namedWindow( "show", 1);//创建窗口void showPicture_Left(Mat img_fan,Mat img_shu,Mat img){int width = img_shu.cols;//读取图像宽度 ##int height = img_shu.rows;//读取图像高度 ##int channel = img_shu.channels();//读取图像通道数int i, j,w,c = width/20,k = 0,k1=0;int w1 = width/20;for(w=width;w>=w1;w-=w1) {waitKey(100); for(i=0;i<height;i++) //i为行数,即图像的高度{for(j=width-1;j>=w-20;j--)  //j为的列数,即图像的宽度{for(c=0;c<3;c++)  //c为通道数,RGB三个通道{int j2 = j + width;img.at<Vec3b>(i,j2)[c] = img_shu.at<Vec3b>(i,j)[c];}}}k += w1*2;k1 += w1;Mat roi = img(Rect(2*width-k,0,k1,height));Mat roi2 = img_fan(Rect(w-20,0,k1,height));addWeighted(roi,0,roi2,1,0.,roi);imshow( WINDOW_NAME,img);//显示图像}}void showPicture_Right(Mat img_fan,Mat img_shu,Mat img){int width = img_shu.cols;//读取图像宽度 ##int height = img_shu.rows;//读取图像高度 ##int channel = img_shu.channels();//读取图像通道数int i, j,w,c;for(w=width/20;w<=width;w+=width/20) {waitKey(100); Mat ROI3 = img(Rect(0,0,w,height));Mat ROI4 = img_shu(Rect(0,0,w,height));addWeighted(ROI3,0,ROI4,1,0.,ROI3);Mat roi = img(Rect(w,0,w,height));Mat roi2 = img_fan(Rect(0,0,w,height));addWeighted(roi,0,roi2,1,0.,roi);imshow( WINDOW_NAME,img);//显示图像}}int main(){vector<Mat> pic1(7);//定义一个Mat型的容器,存储容量为7//将要翻页的图片存入容器中pic1[0] = imread("1.jpg");pic1[1] = imread("2.jpg");pic1[2] = imread("3.jpg");pic1[3] = imread("4.jpg");pic1[4] = imread("5.jpg");pic1[5] = imread("6.jpg");pic1[6] = imread("7.jpg");int num = pic1.size();//获取容器的容量int i = -1;Mat img_fengMian = pic1[0];Mat img_fan = pic1[1];Mat img_shu = pic1[2];Mat img(img_shu.rows,img_shu.cols*2,CV_8UC3);//定义翻页窗口的大小,图片格式为8通道Mat ROI3 = img(Rect(img.cols/2,0,img.cols/2,img.rows));Mat ROI4 = img_fengMian(Rect(0,0,img_fengMian.cols,img_fengMian.rows));addWeighted(ROI3,0,ROI4,1,0.,ROI3);imshow(WINDOW_NAME,img);cout << "开始翻页:输入l为向左翻页,输入r为向右翻页,输入y表示回封面,输入E退出。" << endl;while(1){int c = waitKey(0);if ( (c & 255) == 27){cout << "退出。。。。。" << endl;break;}if ( i <= num ){if((char)c == 'l'){i += 2;if ( i < num ){img_fan = pic1[i];img_shu = pic1[i+1];showPicture_Left(img_fan,img_shu,img);}if(i >= num){cout << "已经是最底页了!不能向左翻页了,请向右翻页r 或回到封面y 或退出ESC!!!!!!" << endl;if((char)waitKey(0) == 'r'){img_fan = pic1[i-3];img_shu = pic1[i-4];showPicture_Right(img_fan,img_shu,img);i -= 4;}}}else if((char)c == 'r'){if (i > 1){img_fan = pic1[i-1];img_shu = pic1[i-2];showPicture_Right(img_fan,img_shu,img);i -= 2;}if ( i == 1 ){cout << "已经是最前页了!不能向右翻页了,请向左翻页l 或回到封面y 或退出ESC!!!" << endl;}}elsewaitKey(0);}}waitKey(0);return 0;}


原创粉丝点击