- #include<iostream>
- #include<fstream>
- #include"json.h"
- #include "opencv2/opencv.hpp"
- using namespace cv;
- using namespace std;
- void get_json_txt()
- {
- system("curl \"http://192.168.8.3:3000/getPhotoWallLogin?user=steve02&key=670b14728ad9902aecba32e22fa4f6bd&screenCode=sc08\" -o json_data.txt");
- }
- Json::Value get_json_array()
- {
- ifstream file("json_data.txt");
- if (!file)
- {
- cout << "Open file the json_dat.txt fail!!!" << endl;
- getchar();
- return -1;
- }
- Json::Value root;
- Json::Reader reader;
- if (!reader.parse(file,root,false))
- {
- cout << "Plz check your url make sure you can contact your host" << endl;
- getchar();
- return -1;
- }
- return root;
- }
- vector<string> get_url(Json::Value root)
- {
- vector<string> pic_url;
- for (int i = 0; i < 4; ++i)
- {
- pic_url.push_back(root["info"][i]["originalInfo"]["url"].asString());
- }
- //for (auto s : pic_url)
- // cout << s << endl;
- return pic_url;
- }
- void MultiImage_OneWin(const std::string& MultiShow_WinName,const vector<Mat>& SrcImg_V,CvSize Subplot,CvSize ImgMax_Size);
- int main()
- {
- string pic1_photoId_index(" ");
- string pic2_photoId_index(" ");
- string pic3_photoId_index(" ");
- string pic4_photoId_index(" ");
- while (1)
- {
- get_json_txt();
- Json::Value root;
- root = get_json_array();
- cout << root.size();
- get_url(root);
- int index[4] = { 0,1,2,3 };
- cout << "---------------------------------------------------" << endl;
- cout << "上次图片1的id--->" << pic1_photoId_index << endl;
- cout << "上次图片2的id--->" << pic2_photoId_index << endl;
- cout << "上次图片1的id--->" << pic3_photoId_index << endl;
- cout << "上次图片2的id--->" << pic4_photoId_index << endl;
- string pic1 = root["info"][index[0]]["photoId"].asString();
- string pic2 = root["info"][index[1]]["photoId"].asString();
- string pic3 = root["info"][index[2]]["photoId"].asString();
- string pic4 = root["info"][index[3]]["photoId"].asString();
- cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
- cout << "图片id1--------->" << pic1 << endl;
- cout << "图片id2--------->" << pic2 << endl;
- cout << "图片id3--------->" << pic1 << endl;
- cout << "图片id4--------->" << pic2 << endl;
- cout << "---------------------------------------------------" << endl;
- //if (pic1 != pic1_photoId_index || pic2 != pic2_photoId_index || pic3 != pic3_photoId_index || pic4 != pic4_photoId_index)
- {
- pic1_photoId_index = pic1;
- pic2_photoId_index = pic2;
- pic3_photoId_index = pic3;
- pic4_photoId_index = pic4;
- vector<string>pic_url;
- pic_url = get_url(root);
- string http = root["photoServerIp"].asString();
- cout << pic_url.size() << endl;
- string command1 = "curl -o 1.jpg " + http + "/" + pic_url[0];
- string command2 = "curl -o 2.jpg " + http + "/" + pic_url[1];
- string command3 = "curl -o 3.jpg " + http + "/" + pic_url[2];
- string command4 = "curl -o 4.jpg " + http + "/" + pic_url[3];
- cout << command1 << endl;
- cout << command2 << endl;
- cout << command3 << endl;
- cout << command4 << endl;
- system(command1.c_str());
- system(command2.c_str());
- system(command3.c_str());
- system(command4.c_str());
- }
- vector<Mat> imgs(4);
- imgs[0] = imread("1.jpg");
- imgs[1] = imread("2.jpg");
- imgs[2] = imread("3.jpg");
- imgs[3] = imread("4.jpg");
- MultiImage_OneWin("Multiple Images",imgs,cvSize(2,2),cvSize(400,280));
- }
- }
- void MultiImage_OneWin(const std::string& MultiShow_WinName,CvSize ImgMax_Size)
- {
- //Reference : http://blog.csdn.net/yangyangyang20092010/article/details/21740373
- //Window's image
- Mat Disp_Img;
- //Width of source image
- CvSize Img_OrigSize = cvSize(SrcImg_V[0].cols,SrcImg_V[0].rows);
- //******************** Set the width for displayed image ********************//
- //Width vs height ratio of source image
- float WH_Ratio_Orig = Img_OrigSize.width / (float)Img_OrigSize.height;
- CvSize ImgDisp_Size = cvSize(100,100);
- //if (Img_OrigSize.width > ImgMax_Size.width)
- // ImgDisp_Size = cvSize(ImgMax_Size.width,(int)ImgMax_Size.width / WH_Ratio_Orig);
- //else if (Img_OrigSize.height > ImgMax_Size.height)
- // ImgDisp_Size = cvSize((int)ImgMax_Size.height*WH_Ratio_Orig,ImgMax_Size.height);
- //else
- ImgDisp_Size = cvSize(Img_OrigSize.width,Img_OrigSize.height);
- //******************** Check Image numbers with Subplot layout ********************//
- int Img_Num = (int)SrcImg_V.size();
- if (Img_Num > Subplot.width * Subplot.height)
- {
- cout << "Your Subplot Setting is too small !" << endl;
- exit(0);
- }
- //******************** Blank setting ********************//
- CvSize DispBlank_Edge = cvSize(80,60);
- CvSize DispBlank_Gap = cvSize(15,15);
- //******************** Size for Window ********************//
- Disp_Img.create(Size(ImgDisp_Size.width*Subplot.width + DispBlank_Edge.width + (Subplot.width - 1)*DispBlank_Gap.width,ImgDisp_Size.height*Subplot.height + DispBlank_Edge.height + (Subplot.height - 1)*DispBlank_Gap.height),CV_8UC3);
- Disp_Img.setTo(0);//Background
- //Left top position for each image
- int EdgeBlank_X = (Disp_Img.cols - (ImgDisp_Size.width*Subplot.width + (Subplot.width - 1)*DispBlank_Gap.width)) / 2;
- int EdgeBlank_Y = (Disp_Img.rows - (ImgDisp_Size.height*Subplot.height + (Subplot.height - 1)*DispBlank_Gap.height)) / 2;
- CvPoint LT_BasePos = cvPoint(EdgeBlank_X,EdgeBlank_Y);
- CvPoint LT_Pos = LT_BasePos;
- //Display all images
- for (int i = 0; i < Img_Num; i++)
- {
- //Obtain the left top position
- if ((i%Subplot.width == 0) && (LT_Pos.x != LT_BasePos.x))
- {
- LT_Pos.x = LT_BasePos.x;
- LT_Pos.y += (DispBlank_Gap.height + ImgDisp_Size.height);
- }
- //Writting each to Window's Image
- Mat imgROI = Disp_Img(Rect(LT_Pos.x,LT_Pos.y,ImgDisp_Size.width,ImgDisp_Size.height));
- resize(SrcImg_V[i],imgROI,Size(ImgDisp_Size.width,ImgDisp_Size.height));
- LT_Pos.x += (DispBlank_Gap.width + ImgDisp_Size.width);
- }
- //Get the screen size of computer
- //int Scree_W = GetSystemMetrics(SM_CXSCREEN);
- //int Scree_H = GetSystemMetrics(SM_CYSCREEN);
- int Scree_W = 1920;
- int Scree_H = 1080;
- //namedWindow("pic_viewer",CV_WINDOW_NORMAL);
- //setWindowProperty("pic_viewer",CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN);
- cvNamedWindow(MultiShow_WinName.c_str(),CV_WINDOW_NORMAL);
- //cvMoveWindow(MultiShow_WinName.c_str(),(Scree_W - Disp_Img.cols) / 2,(Scree_H - Disp_Img.rows) / 2);//Centralize the window
- setWindowProperty(MultiShow_WinName,CV_WINDOW_FULLSCREEN);
- cvShowImage(MultiShow_WinName.c_str(),&(IplImage(Disp_Img)));
- cvWaitKey(100);
- //cvDestroyWindow(MultiShow_WinName.c_str());
- }
修改版本:
- /************************************************************************
- * Author : stallman chen
- * Date : 2015/01/17
- * Address : pciture works shanghai
- * Email : 275076730@qq.com
- * function: Show 4 images in one window
- *************************************************************************/
- #include<iostream>
- #include<fstream>
- #include<string>
- #include"json.h"
- #include "opencv2/opencv.hpp"
- using namespace cv;
- using namespace std;
- void get_json_txt()
- {
- system("curl \"http://192.168.8.3:3000/getPhotoWallLogin?user=steve02&key=670b14728ad9902aecba32e22fa4f6bd&screenCode=sc08\" -o json_data.txt");
- }
- Json::Value get_json_array()
- {
- ifstream file("json_data.txt",ios::out);
- if (!file)
- {
- cout << "Open file the json_dat.txt fail!!!" << endl;
- getchar();
- return -1;
- }
- Json::Value root;
- Json::Reader reader;
- if (!reader.parse(file,false))
- {
- cout << "Plz check your url make sure that you can contact your host" << endl;
- getchar();
- return -1;
- }
- return root;
- }
- vector<string> get_url(Json::Value root)
- {
- vector<string> pic_url;
- for (int i = 0; i < 4; ++i)
- {
- pic_url.push_back(root["info"][i]["originalInfo"]["url"].asString());
- }
- //for (auto s : pic_url)
- // cout << s << endl;
- return pic_url;
- }
- Mat show_4_images(const vector<Mat>& src_img)
- {
- Mat image_display;
- size_t sz = src_img.size();
- CvSize src_image_size = cvSize(src_img[0].cols,src_img[0].rows);
- //CvSize image_display_size = cvSize(src_image_size.width,src_image_size.height);
- //******************** Blank setting ********************//
- CvSize DispBlank_Edge = cvSize(200,200);
- CvSize DispBlank_Gap = cvSize(200,200);
- image_display.create(Size(6934,3900),CV_8UC3);
- image_display.setTo(0);//Background
- if (sz >= 1)
- {
- Mat imgROI0 = image_display(Rect(250,100,src_image_size.width,src_image_size.height));
- resize(src_img[0],imgROI0,Size(2400,1800),INTER_CUBIC);
- }
- if (sz >= 2)
- {
- Mat imgROI1 = image_display(Rect(3724,src_image_size.height));
- resize(src_img[1],imgROI1,INTER_CUBIC);
- }
- if (sz >= 3)
- {
- Mat imgROI2 = image_display(Rect(650,2000,src_image_size.height));
- resize(src_img[2],imgROI2,INTER_CUBIC);
- }
- if (sz >= 4)
- {
- Mat imgROI3 = image_display(Rect(4300,src_image_size.height));
- resize(src_img[3],imgROI3,INTER_CUBIC);
- }
- return image_display;
- }
- int main()
- {
- string pic1_photoId_index("");
- string pic2_photoId_index("");
- string pic3_photoId_index("");
- string pic4_photoId_index("");
- bool flag = false;
- int index[4] = { 0,3 };
- while (1)
- {
- get_json_txt();
- Json::Value root;
- root = get_json_array();
- int info_zize = root["info"].size();
- //cout << root.size() << endl;
- cout << info_zize << endl;
- bool flag = false;
- if (info_zize == 4)
- {
- cout << "-----------------------------------------------------" << endl;
- cout << "上次图片1的id--->" << pic1_photoId_index << endl;
- cout << "上次图片2的id--->" << pic2_photoId_index << endl;
- cout << "上次图片3的id--->" << pic3_photoId_index << endl;
- cout << "上次图片4的id--->" << pic4_photoId_index << endl;
- string pic1 = root["info"][index[0]]["photoId"].asString();
- string pic2 = root["info"][index[1]]["photoId"].asString();
- string pic3 = root["info"][index[2]]["photoId"].asString();
- string pic4 = root["info"][index[3]]["photoId"].asString();
- cout << "----------------------------------------------------" << endl;
- cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
- cout << "图片id1--------->" << pic1 << endl;
- cout << "图片id2--------->" << pic2 << endl;
- cout << "图片id3--------->" << pic3 << endl;
- cout << "图片id4--------->" << pic4 << endl;
- cout << "---------------------------------------------------" << endl;
- if (pic1 != pic1_photoId_index)
- {
- ofstream input("photoid.txt");
- input << pic1 << endl;
- input.close();
- vector<string>pic_url;
- pic_url = get_url(root);
- string http = root["photoServerIp"].asString();
- cout << pic_url.size() << endl;
- string command1 = "curl -o 1.jpg " + http + "/" + pic_url[0];
- string command2 = "curl -o 2.jpg " + http + "/" + pic_url[1];
- string command3 = "curl -o 3.jpg " + http + "/" + pic_url[2];
- string command4 = "curl -o 4.jpg " + http + "/" + pic_url[3];
- cout << command1 << endl;
- cout << command2 << endl;
- cout << command3 << endl;
- cout << command4 << endl;
- cout << "---------------------------------------------------" << endl;
- cout << "---------------------------------------------------" << endl;
- system(command1.c_str());
- system(command2.c_str());
- system(command3.c_str());
- system(command4.c_str());
- pic1_photoId_index = pic1;
- pic2_photoId_index = pic2;
- pic3_photoId_index = pic3;
- pic4_photoId_index = pic4;
- vector<Mat> imgs;
- imgs.push_back(imread("1.jpg"));
- imgs.push_back(imread("2.jpg"));
- imgs.push_back(imread("3.jpg"));
- imgs.push_back(imread("4.jpg"));
- Mat display_img = show_4_images(imgs);
- namedWindow("pic_viewer",CV_WINDOW_NORMAL);
- setWindowProperty("pic_viewer",CV_WINDOW_FULLSCREEN);
- imshow("pic_viewer",display_img);
- waitKey(10);
- }
- }
- if (info_zize == 3)
- {
- cout << "-----------------------------------------------------" << endl;
- cout << "上次图片1的id--->" << pic1_photoId_index << endl;
- cout << "上次图片2的id--->" << pic2_photoId_index << endl;
- cout << "上次图片3的id--->" << pic3_photoId_index << endl;
- cout << "上次图片4的id--->" << pic4_photoId_index << endl;
- string pic1 = root["info"][index[0]]["photoId"].asString();
- string pic2 = root["info"][index[1]]["photoId"].asString();
- string pic3 = root["info"][index[2]]["photoId"].asString();
- string pic4 = pic4_photoId_index;
- cout << "----------------------------------------------------" << endl;
- cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
- cout << "图片id1--------->" << pic1 << endl;
- cout << "图片id2--------->" << pic2 << endl;
- cout << "图片id3--------->" << pic3 << endl;
- cout << "图片id4--------->" << pic4 << endl;
- cout << "---------------------------------------------------" << endl;
- if (pic1 != pic1_photoId_index)
- {
- ofstream input("photoid.txt");
- input << pic1 << endl;
- input.close();
- vector<string>pic_url;
- pic_url = get_url(root);
- string http = root["photoServerIp"].asString();
- cout << pic_url.size() << endl;
- string command1 = "curl -o 1.jpg " + http + "/" + pic_url[0];
- string command2 = "curl -o 2.jpg " + http + "/" + pic_url[1];
- string command3 = "curl -o 3.jpg " + http + "/" + pic_url[2];
- cout << command1 << endl;
- cout << command2 << endl;
- cout << command3 << endl;
- cout << "---------------------------------------------------" << endl;
- cout << "---------------------------------------------------" << endl;
- system(command1.c_str());
- system(command2.c_str());
- system(command3.c_str());
- pic1_photoId_index = pic1;
- pic2_photoId_index = pic2;
- pic3_photoId_index = pic3;
- vector<Mat> imgs;
- imgs.push_back(imread("1.jpg"));
- imgs.push_back(imread("2.jpg"));
- imgs.push_back(imread("3.jpg"));
- Mat display_img = show_4_images(imgs);
- namedWindow("pic_viewer",display_img);
- waitKey(10);
- }
- }
- if (info_zize == 2)
- {
- cout << "-----------------------------------------------------" << endl;
- cout << "上次图片1的id--->" << pic1_photoId_index << endl;
- cout << "上次图片2的id--->" << pic2_photoId_index << endl;
- cout << "上次图片3的id--->" << pic3_photoId_index << endl;
- cout << "上次图片4的id--->" << pic4_photoId_index << endl;
- string pic1 = root["info"][index[0]]["photoId"].asString();
- string pic2 = root["info"][index[1]]["photoId"].asString();
- string pic3 = pic4_photoId_index;
- string pic4 = pic4_photoId_index;
- cout << "----------------------------------------------------" << endl;
- cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
- cout << "图片id1--------->" << pic1 << endl;
- cout << "图片id2--------->" << pic2 << endl;
- cout << "图片id3--------->" << pic3 << endl;
- cout << "图片id4--------->" << pic4 << endl;
- cout << "---------------------------------------------------" << endl;
- if (pic1 != pic1_photoId_index)
- {
- ofstream input("photoid.txt");
- input << pic1 << endl;
- input.close();
- vector<string>pic_url;
- pic_url = get_url(root);
- string http = root["photoServerIp"].asString();
- cout << pic_url.size() << endl;
- string command1 = "curl -o 1.jpg " + http + "/" + pic_url[0];
- string command2 = "curl -o 2.jpg " + http + "/" + pic_url[1];
- cout << command1 << endl;
- cout << command2 << endl;
- cout << "---------------------------------------------------" << endl;
- cout << "---------------------------------------------------" << endl;
- system(command1.c_str());
- system(command2.c_str());
- pic1_photoId_index = pic1;
- pic2_photoId_index = pic2;
- vector<Mat> imgs;
- imgs.push_back(imread("1.jpg"));
- imgs.push_back(imread("2.jpg"));
- Mat display_img = show_4_images(imgs);
- namedWindow("pic_viewer",display_img);
- waitKey(10);
- }
- }
- if (info_zize == 1)
- {
- cout << "-----------------------------------------------------" << endl;
- cout << "上次图片1的id--->" << pic1_photoId_index << endl;
- cout << "上次图片2的id--->" << pic2_photoId_index << endl;
- cout << "上次图片3的id--->" << pic3_photoId_index << endl;
- cout << "上次图片4的id--->" << pic4_photoId_index << endl;
- string pic1 = root["info"][index[0]]["photoId"].asString();
- string pic2 = pic4_photoId_index;
- string pic3 = pic4_photoId_index;
- string pic4 = pic4_photoId_index;
- cout << "----------------------------------------------------" << endl;
- cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
- cout << "图片id1--------->" << pic1 << endl;
- cout << "图片id2--------->" << pic2 << endl;
- cout << "图片id3--------->" << pic3 << endl;
- cout << "图片id4--------->" << pic4 << endl;
- cout << "---------------------------------------------------" << endl;
- if (pic1 != pic1_photoId_index)
- {
- ofstream input("photoid.txt");
- input << pic1 << endl;
- input.close();
- vector<string>pic_url;
- pic_url = get_url(root);
- string http = root["photoServerIp"].asString();
- cout << pic_url.size() << endl;
- string command1 = "curl -o 1.jpg " + http + "/" + pic_url[0];
- cout << command1 << endl;
- cout << "---------------------------------------------------" << endl;
- cout << "---------------------------------------------------" << endl;
- system(command1.c_str());
- pic1_photoId_index = pic1;
- vector<Mat> imgs;
- imgs.push_back(imread("1.jpg"));
- Mat display_img = show_4_images(imgs);
- namedWindow("pic_viewer",display_img);
- waitKey(10);
- }
- }
- if (info_zize == 0)
- {
- namedWindow("pic_viewer",CV_WINDOW_NORMAL);
- setWindowProperty("pic_viewer",CV_WINDOW_FULLSCREEN);
- Mat black = imread("result.jpg");
- imshow("pic_viewer",black);
- cvWaitKey(2);
- }
- }
- }