2023-04-08 00:56:20 +00:00
|
|
|
#include "imagesavehandler.h"
|
|
|
|
#include "imgproc.h"
|
|
|
|
#include "opencv2/opencv.hpp"
|
|
|
|
#include "stringex.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
ImageSaveHandler::ImageSaveHandler()
|
|
|
|
: pool(4)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
ImageSaveHandler::~ImageSaveHandler()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-05-02 01:50:55 +00:00
|
|
|
void ImageSaveHandler::add_image(void *data, int width, int height, int type, int scannnum,unsigned int fpgaversion)
|
2023-04-08 00:56:20 +00:00
|
|
|
{
|
|
|
|
static int indexx = 0;
|
|
|
|
std::string path = std::to_string(++indexx) + ".png";
|
|
|
|
results.emplace_back(
|
|
|
|
pool.enqueue([data, width, height, type, path] {
|
|
|
|
cv::Mat mat;
|
|
|
|
cv::Mat saveMat;
|
|
|
|
std::vector<cv::Mat> ch_mats;
|
|
|
|
int dstwidth, dstheight;
|
|
|
|
dstwidth = width * 3;
|
|
|
|
dstheight = height / 3;
|
|
|
|
|
|
|
|
std::cout << path << std::endl;
|
|
|
|
if (type == CV_8UC3)
|
|
|
|
{
|
|
|
|
mat = cv::Mat(height / 3, width * 9, CV_8UC1, data);
|
|
|
|
saveMat = cv::Mat(dstheight, dstwidth, CV_8UC3);
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
{ //gray
|
|
|
|
saveMat = cv::Mat(height / 3, width * 3, CV_8UC1, data);
|
|
|
|
}
|
|
|
|
static int savenum;
|
|
|
|
if (type == CV_8UC3)
|
|
|
|
{
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
|
|
{ // B G R
|
|
|
|
cv::Mat mattemp = mat(cv::Rect(dstwidth * i, 0, dstwidth, dstheight));
|
|
|
|
ch_mats.push_back(mattemp);
|
|
|
|
}
|
|
|
|
swap(ch_mats[1], ch_mats[2]);
|
|
|
|
cv::merge(ch_mats, saveMat);
|
|
|
|
}
|
|
|
|
std::cout << string_format("wdith:%d, height:%d\n", saveMat.cols, saveMat.rows) << std::endl;
|
|
|
|
cv::imwrite(path, saveMat);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ImageSaveHandler::done()
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|