main.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include <QCoreApplication>
  2. #include <opencv2/core/core.hpp>
  3. #include <opencv2/core/ocl.hpp>
  4. #include <opencv2/highgui/highgui.hpp>
  5. #include <opencv2/imgproc.hpp>
  6. #include <opencv2/imgcodecs.hpp>
  7. #include <QDebug>
  8. #include <QElapsedTimer>
  9. int main(int argc, char *argv[])
  10. {
  11. QCoreApplication a(argc, argv);
  12. QElapsedTimer loading;
  13. loading.start();
  14. cv::Mat image = cv::imread("C://Effective_Bayer.tif", cv::IMREAD_GRAYSCALE);
  15. if (image.empty())
  16. qDebug() << "Image vide";
  17. else {
  18. qDebug() << "[CPU] Chargement OK : " << loading.elapsed() << "ms";
  19. loading.restart();
  20. cv::Mat image = cv::imread("C://Effective_Bayer.tif", cv::IMREAD_GRAYSCALE);
  21. cv::UMat image2;
  22. image.copyTo(image2);
  23. qDebug() << "[GPU] Chargement OK : " << loading.elapsed() << "ms";
  24. qDebug() << "Height : " << image.size().height;
  25. qDebug() << "Width : " << image.size().width;
  26. if (image.channels() != 1) {
  27. qDebug() << image.channels() << "channels found, need 1 only";
  28. return 0;
  29. }
  30. qDebug() << "Channels : " << image.channels();
  31. qDebug() << "\r\r";
  32. cv::Mat image_debayer_cpu(image.size().height, image.size().width, CV_16UC3);
  33. cv::UMat image_debayer_gpu(image.size().height, image.size().width, CV_16UC3);
  34. std::vector<int> compression_params;
  35. compression_params.push_back(259);
  36. compression_params.push_back(1);
  37. loading.restart();
  38. cv::cvtColor(image, image_debayer_cpu, cv::COLOR_BayerBG2BGR);
  39. qDebug() << "[CPU] cv::COLOR_BayerBG2BGR done in :\t\t" << loading.elapsed() << "ms";
  40. loading.restart();
  41. cv::cvtColor(image, image_debayer_cpu, cv::COLOR_BayerBG2BGR_EA);
  42. qDebug() << "[CPU] cv::COLOR_BayerBG2BGR_EA done in :\t" << loading.elapsed() << "ms";
  43. loading.restart();
  44. cv::cvtColor(image, image_debayer_cpu, cv::COLOR_BayerBG2BGR_VNG);
  45. qDebug() << "[CPU] cv::COLOR_BayerBG2BGR_VNG done in :\t" << loading.elapsed() << "ms";
  46. loading.restart();
  47. cv::cvtColor(image, image_debayer_cpu, cv::COLOR_BayerBG2BGRA);
  48. qDebug() << "[CPU] cv::COLOR_BayerBG2BGRA done in :\t\t" << loading.elapsed() << "ms";
  49. if (cv::ocl::haveOpenCL() == true) {
  50. cv::ocl::Context ctx = cv::ocl::Context::getDefault();
  51. if (!ctx.ptr())
  52. {
  53. qDebug() << "OpenCL is not available";
  54. return 1;
  55. }
  56. cv::ocl::Device device = cv::ocl::Device::getDefault();
  57. if (!device.compilerAvailable())
  58. {
  59. qDebug() << "OpenCL compiler is not available";
  60. return 1;
  61. }
  62. loading.restart();
  63. cv::cvtColor(image, image_debayer_gpu, cv::COLOR_BayerBG2BGR);
  64. qDebug() << "[GPU] cv::COLOR_BayerBG2BGR done in :\t\t" << loading.elapsed() << "ms";
  65. loading.restart();
  66. cv::cvtColor(image, image_debayer_gpu, cv::COLOR_BayerBG2BGR_EA);
  67. qDebug() << "[GPU] cv::COLOR_BayerBG2BGR_EA done in :\t" << loading.elapsed() << "ms";
  68. loading.restart();
  69. cv::cvtColor(image, image_debayer_gpu, cv::COLOR_BayerBG2BGR_VNG);
  70. qDebug() << "[GPU] cv::COLOR_BayerBG2BGR_VNG done in :\t" << loading.elapsed() << "ms";
  71. loading.restart();
  72. cv::cvtColor(image, image_debayer_gpu, cv::COLOR_BayerBG2BGRA);
  73. qDebug() << "[GPU] cv::COLOR_BayerBG2BGRA done in :\t\t" << loading.elapsed() << "ms";
  74. loading.restart();
  75. cv::imwrite("Output.tif", image_debayer_cpu, compression_params);
  76. qDebug() << "saved in : " << loading.elapsed() << "ms";
  77. }
  78. }
  79. return a.exec();
  80. }