tx-gxx-linux/device/gxx-linux/imgproc/imageencode.cpp

57 lines
1.5 KiB
C++
Raw Normal View History

2023-04-08 00:56:20 +00:00
#include "imageencode.h"
#include "memoryex.h"
#include "opencv2/opencv.hpp"
#include "FreeImagePlus.h"
#include "StopWatch.h"
BmpImageEncode::~BmpImageEncode()
{
}
MemoryPtr BmpImageEncode::encode(cv::Mat &image)
{
fipImage fimage(FIT_BITMAP, image.cols, image.rows, image.type() == CV_8UC3 ? 24 : 8);
int byteWidth = image.elemSize() * image.cols;
for (int i = 0; i < fimage.getHeight(); i++)
memcpy(fimage.getScanLine(i), image.ptr<uchar>(i), byteWidth);
FipMemoryPtr mem(new FipMemory());
auto &mio = mem->io();
fimage.saveToMemory(FIF_PNG, mio);
return mem;
}
JpegImageEncode::JpegImageEncode(bool bwimg)
{
if (!bwimg)
{
compression_params.push_back(cv::IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
}
else{
compression_params.push_back(/*CV_IMWRITE_PNG_STRATEGY*/17);
compression_params.push_back(cv::IMWRITE_PNG_STRATEGY_FIXED);
}
m_bwimg = bwimg;
}
JpegImageEncode::~JpegImageEncode()
{
}
MemoryPtr JpegImageEncode::encode(cv::Mat &image)
{
VectorMemroyPtr mem = VectorMemroyPtr(new VectorMemroy());
StopWatch sw;
cv::imencode(m_bwimg ? ".png" : ".jpg", image, mem->buf(), compression_params);
//printf("encode time = %0.2f \n", sw.elapsed_ms());
return mem;
}
MemoryPtr buff2mem(void *data, int size)
{
auto mem = std::shared_ptr<VectorMemroy>(new VectorMemroy());
mem->buf().resize(size);
// memcpy(mem->buf().data(), data, size);
return mem;
}