main.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include <QCoreApplication>
  2. #include <thread>
  3. #include <opencv2/opencv.hpp>
  4. #include <opencv2/core.hpp>
  5. #ifdef SYSTEM_AGX
  6. #include "opencv2/imgcodecs/legacy/constants_c.h"
  7. #include <opencv2/imgproc/types_c.h>
  8. #endif
  9. #ifdef Q_OS_WIN
  10. #include "opencv2/imgcodecs/legacy/constants_c.h"
  11. #include <opencv2/imgproc/types_c.h>
  12. #endif
  13. #include <QTime>
  14. #include "modulecomm.h"
  15. #include "rawpic.pb.h"
  16. #include "xmlparam.h"
  17. #include "ivversion.h"
  18. #include "ivbacktrace.h"
  19. int gnpicquuality = 60;
  20. int gnwidth = 640;
  21. int gnheight = 360;
  22. std::string gstrmem_input;
  23. std::string gstrmem_output;
  24. void * gpainput;
  25. void * gpaoutput;
  26. void Listenpic(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
  27. {
  28. if(nSize<1000)return;
  29. iv::vision::rawpic pic;
  30. if(false == pic.ParseFromArray(strdata,nSize))
  31. {
  32. std::cout<<"picview Listenpic fail."<<std::endl;
  33. return;
  34. }
  35. cv::Mat mat(pic.height(),pic.width(),pic.mattype());
  36. if(pic.type() == 1)
  37. memcpy(mat.data,pic.picdata().data(),mat.rows*mat.cols*mat.elemSize());
  38. else
  39. {
  40. // qDebug("jpg");
  41. std::vector<unsigned char> buff(pic.picdata().data(),pic.picdata().data()+pic.picdata().size());
  42. mat = cv::imdecode(buff,CV_LOAD_IMAGE_COLOR);
  43. }
  44. std::vector<int> param = std::vector<int>(2);
  45. param[0] = CV_IMWRITE_JPEG_QUALITY;
  46. param[1] = gnpicquuality; // default(95) 0-100
  47. std::vector<unsigned char> buff;
  48. cv::Mat mat1;
  49. cv::resize(mat,mat1,cv::Size(gnwidth,gnheight));
  50. iv::vision::rawpic outpic;
  51. cv::imencode(".jpg", mat1, buff, param);
  52. outpic.set_picdata(buff.data(),buff.size());
  53. buff.clear();
  54. outpic.set_type(2);
  55. outpic.set_time(pic.time());
  56. outpic.set_index(pic.index());
  57. outpic.set_elemsize(mat1.elemSize());
  58. outpic.set_width(mat1.cols);
  59. outpic.set_height(mat1.rows);
  60. int ndatasize = outpic.ByteSize();
  61. std::cout<<outpic.index()<<":after compress . size is "<<ndatasize<<std::endl;
  62. char * strbuf = new char[ndatasize];
  63. if(outpic.SerializeToArray(strbuf,ndatasize))
  64. {
  65. iv::modulecomm::ModuleSendMsg(gpaoutput,strbuf,ndatasize);
  66. }
  67. delete strbuf;
  68. }
  69. int main(int argc, char *argv[])
  70. {
  71. RegisterIVBackTrace();
  72. showversion("driver_piccompress");
  73. QCoreApplication a(argc, argv);
  74. char strxmlpath[256];
  75. if(argc<2)
  76. {
  77. snprintf(strxmlpath,255,"driver_piccompress.xml");
  78. }
  79. else
  80. {
  81. strncpy(strxmlpath,argv[1],255);
  82. }
  83. std::cout<<" xml path:"<<strxmlpath<<std::endl;
  84. iv::xmlparam::Xmlparam xp(strxmlpath);
  85. gstrmem_input = xp.GetParam("input","usbpic");
  86. gstrmem_output = xp.GetParam("output","compresspic");
  87. std::cout<<"input:"<<gstrmem_input<<std::endl;
  88. std::cout<<"output:"<<gstrmem_output<<std::endl;
  89. std::string strquality = xp.GetParam("quality","60");
  90. gnpicquuality = atoi(strquality.data());
  91. std::cout<<"picture quality:"<<gnpicquuality<<std::endl;
  92. std::string strwidth = xp.GetParam("width","640");
  93. gnwidth = atoi(strwidth.data());
  94. std::cout<<"width:"<<gnwidth<<std::endl;
  95. std::string strheight = xp.GetParam("height","360");
  96. gnheight = atoi(strheight.data());
  97. std::cout<<"height:"<<gnheight<<std::endl;
  98. gpainput = iv::modulecomm::RegisterRecv(gstrmem_input.data(),Listenpic);
  99. gpaoutput = iv::modulecomm::RegisterSend(gstrmem_output.data(),10000000,1);
  100. return a.exec();
  101. }