Getting rid of opencv
This commit is contained in:
+69
-86
@@ -115,7 +115,7 @@ bool loadRAW(const QString path, ImageInfoData &info, RawImage **image)
|
||||
out[d++] = p;
|
||||
}
|
||||
}
|
||||
*image = new RawImage(rawdata.sizes.width, rawdata.sizes.height, RawImage::UINT16);
|
||||
*image = new RawImage(rawdata.sizes.width, rawdata.sizes.height, 1, RawImage::UINT16);
|
||||
memcpy((*image)->data(), &out[0], sizeof(uint16_t)*d);
|
||||
}
|
||||
|
||||
@@ -212,28 +212,35 @@ bool loadFITS(const QString path, ImageInfoData &info, RawImage **image)
|
||||
|
||||
if(naxis >= 2 && naxis <= 3 && status == 0)
|
||||
{
|
||||
int cvtype;
|
||||
RawImage::DataType type;
|
||||
int fitstype;
|
||||
std::vector<cv::Mat> cvimg;
|
||||
long fpixel[3] = {1,1,1};
|
||||
switch(imgtype)
|
||||
{
|
||||
case BYTE_IMG:
|
||||
cvtype = CV_8U;
|
||||
type = RawImage::UINT8;
|
||||
fitstype = TBYTE;
|
||||
break;
|
||||
case SHORT_IMG:
|
||||
cvtype = CV_16S;
|
||||
type = RawImage::UINT16;
|
||||
fitstype = TSHORT;
|
||||
break;
|
||||
case USHORT_IMG:
|
||||
cvtype = CV_16U;
|
||||
type = RawImage::UINT16;
|
||||
fitstype = TUSHORT;
|
||||
break;
|
||||
case ULONG_IMG:
|
||||
type = RawImage::UINT32;
|
||||
fitstype = TUINT;
|
||||
break;
|
||||
case FLOAT_IMG:
|
||||
cvtype = CV_32F;
|
||||
type = RawImage::FLOAT32;
|
||||
fitstype = TFLOAT;
|
||||
break;
|
||||
case DOUBLE_IMG:
|
||||
type = RawImage::FLOAT64;
|
||||
fitstype = TDOUBLE;
|
||||
break;
|
||||
default:
|
||||
info.info.append({QObject::tr("Error"), QObject::tr("Unsupported sample format")});
|
||||
goto noload;
|
||||
@@ -247,26 +254,28 @@ bool loadFITS(const QString path, ImageInfoData &info, RawImage **image)
|
||||
info.info.append({QObject::tr("Width"), QString::number(naxes[0])});
|
||||
info.info.append({QObject::tr("Height"), QString::number(naxes[1])});
|
||||
|
||||
RawImage img(w, h, naxis == 2 ? 1 : naxes[2], type);
|
||||
uint8_t *data = static_cast<uint8_t*>(img.data());
|
||||
for (int i=1; i==1 || i<=naxes[2]; i++)
|
||||
{
|
||||
cv::Mat tmp(h, w, cvtype);
|
||||
fpixel[2] = i;
|
||||
fits_read_pix(file, fitstype, fpixel, size, NULL, tmp.ptr(), NULL, &status);
|
||||
if(cvtype == CV_16S)
|
||||
tmp.convertTo(tmp, CV_16U, 1, 32767);
|
||||
cvimg.push_back(tmp);
|
||||
fits_read_pix(file, fitstype, fpixel, size, NULL, data + img.size() * RawImage::typeSize(type) * (i-1), NULL, &status);
|
||||
}
|
||||
if(fitstype == TSHORT)
|
||||
{
|
||||
uint16_t *s = static_cast<uint16_t*>(img.data());
|
||||
size_t size = img.size() * img.channels();
|
||||
for(size_t i=0; i<size; i++)
|
||||
s[i] -= INT16_MIN;
|
||||
}
|
||||
|
||||
if(cvimg.size() == 1)
|
||||
{
|
||||
*image = new RawImage(cvimg[0]);
|
||||
}
|
||||
if(cvimg.size() == 3)
|
||||
{
|
||||
cv::Mat rgb;
|
||||
cv::merge(cvimg, rgb);
|
||||
*image = new RawImage(rgb);
|
||||
}
|
||||
if(img.channels() == 1)
|
||||
*image = new RawImage(std::move(img));
|
||||
else
|
||||
*image = RawImage::fromPlanar(img);
|
||||
|
||||
if(*image)
|
||||
(*image)->convertToGLFormat();
|
||||
}
|
||||
}
|
||||
noload:
|
||||
@@ -310,51 +319,33 @@ bool loadXISF(const QString &path, ImageInfoData &info, RawImage **image)
|
||||
info.info.append({QObject::tr("Height"), QString::number(xisfImage.height())});
|
||||
if(!info.wcs->valid())info.wcs.reset();
|
||||
|
||||
RawImage::DataType type;
|
||||
switch(xisfImage.sampleFormat())
|
||||
{
|
||||
case LibXISF::Image::UInt8: type = RawImage::UINT8; break;
|
||||
case LibXISF::Image::UInt16: type = RawImage::UINT16; break;
|
||||
case LibXISF::Image::UInt32: type = RawImage::UINT32; break;
|
||||
case LibXISF::Image::Float32: type = RawImage::FLOAT32; break;
|
||||
case LibXISF::Image::Float64: type = RawImage::FLOAT64; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
if(xisfImage.channelCount() == 1)
|
||||
{
|
||||
switch(xisfImage.sampleFormat())
|
||||
{
|
||||
case LibXISF::Image::UInt8:
|
||||
*image = new RawImage(xisfImage.width(), xisfImage.height(), RawImage::UINT8);
|
||||
std::memcpy((*image)->data(), xisfImage.imageData(), xisfImage.imageDataSize());
|
||||
break;
|
||||
case LibXISF::Image::UInt16:
|
||||
*image = new RawImage(xisfImage.width(), xisfImage.height(), RawImage::UINT16);
|
||||
std::memcpy((*image)->data(), xisfImage.imageData(), xisfImage.imageDataSize());
|
||||
break;
|
||||
case LibXISF::Image::Float32:
|
||||
*image = new RawImage(xisfImage.width(), xisfImage.height(), RawImage::FLOAT32);
|
||||
std::memcpy((*image)->data(), xisfImage.imageData(), xisfImage.imageDataSize());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
*image = new RawImage(xisfImage.width(), xisfImage.height(), 1, type);
|
||||
std::memcpy((*image)->data(), xisfImage.imageData(), xisfImage.imageDataSize());
|
||||
}
|
||||
else if(xisfImage.channelCount() == 3)
|
||||
else if(xisfImage.channelCount() == 3 || xisfImage.channelCount() == 4)
|
||||
{
|
||||
LibXISF::Image tmpImage = xisfImage;
|
||||
tmpImage.convertPixelStorageTo(LibXISF::Image::Normal);
|
||||
|
||||
switch(tmpImage.sampleFormat())
|
||||
{
|
||||
case LibXISF::Image::UInt8:
|
||||
*image = new RawImage(tmpImage.width(), tmpImage.height(), RawImage::UINT8C3);
|
||||
std::memcpy((*image)->data(), tmpImage.imageData(), tmpImage.imageDataSize());
|
||||
break;
|
||||
case LibXISF::Image::UInt16:
|
||||
*image = new RawImage(tmpImage.width(), tmpImage.height(), RawImage::UINT16C3);
|
||||
std::memcpy((*image)->data(), tmpImage.imageData(), tmpImage.imageDataSize());
|
||||
break;
|
||||
case LibXISF::Image::Float32:
|
||||
*image = new RawImage(tmpImage.width(), tmpImage.height(), RawImage::FLOAT32C3);
|
||||
std::memcpy((*image)->data(), tmpImage.imageData(), tmpImage.imageDataSize());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
tmpImage.convertPixelStorageTo(LibXISF::Image::Planar);
|
||||
*image = RawImage::fromPlanar(tmpImage.imageData(), tmpImage.width(), tmpImage.height(), tmpImage.channelCount(), type);
|
||||
}
|
||||
if(*image)
|
||||
{
|
||||
(*image)->convertToGLFormat();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (LibXISF::Error &err)
|
||||
{
|
||||
@@ -439,11 +430,7 @@ void LoadRunable::run()
|
||||
if(m_analyzeLevel >= Peaks)
|
||||
{
|
||||
std::vector<Peak> peaks;
|
||||
if(raw) {
|
||||
rawImage->quarter();
|
||||
qDebug() << "quarter" << timer.restart();
|
||||
}
|
||||
RawImage *medianImage = rawImage->medianFilter();
|
||||
/*RawImage *medianImage = rawImage->medianFilter();
|
||||
qDebug() << "median" << timer.restart();
|
||||
int numPeaks = medianImage->findPeaks(median+stdDev*2, 20, peaks);
|
||||
delete medianImage;
|
||||
@@ -483,7 +470,7 @@ void LoadRunable::run()
|
||||
info.info.append({QObject::tr("FWHM X"), QString::number(fwhmX/stars.size())});
|
||||
info.info.append({QObject::tr("FWHM Y"), QString::number(fwhmY/stars.size())});
|
||||
}
|
||||
qDebug() << "Star fit" << timer.restart();
|
||||
qDebug() << "Star fit" << timer.restart();*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,10 +485,6 @@ void LoadRunable::run()
|
||||
else
|
||||
QMetaObject::invokeMethod(m_receiver, "imageLoaded", Qt::QueuedConnection, Q_ARG(void*, rawImage), Q_ARG(ImageInfoData, info));
|
||||
}
|
||||
catch(cv::Exception e)
|
||||
{
|
||||
qDebug() << e.what();
|
||||
}
|
||||
catch(std::exception e)
|
||||
{
|
||||
qDebug() << e.what();
|
||||
@@ -566,40 +549,40 @@ void writeFITSImage(fitsfile *fw, RawImage *rawimage, ImageInfoData &imageinfo)
|
||||
int status = 0;
|
||||
long firstpix[3] = {1,1,1};
|
||||
|
||||
int channels = rawimage->mat().channels();
|
||||
int channels = rawimage->channels();
|
||||
int naxis = channels == 1 ? 2 : 3;
|
||||
long naxes[3] = {(int)rawimage->width(), (int)rawimage->height(), rawimage->mat().channels()};
|
||||
long naxes[3] = {(int)rawimage->width(), (int)rawimage->height(), rawimage->channels()};
|
||||
|
||||
std::vector<cv::Mat> mat;
|
||||
std::vector<RawImage> planes;
|
||||
if(channels == 1)
|
||||
mat.push_back(rawimage->mat());
|
||||
planes.push_back(*rawimage);
|
||||
else
|
||||
cv::split(rawimage->mat(), mat);
|
||||
planes = rawimage->split();
|
||||
|
||||
switch(CV_MAT_DEPTH(rawimage->dataType()))
|
||||
switch(rawimage->type())
|
||||
{
|
||||
case CV_8U:
|
||||
case RawImage::UINT8:
|
||||
fits_create_img(fw, BYTE_IMG, naxis, naxes, &status);
|
||||
for(int i=0; i<channels; i++)
|
||||
{
|
||||
firstpix[2] = i+1;
|
||||
fits_write_pix(fw, TBYTE, firstpix, rawimage->size(), mat[i].data, &status);
|
||||
fits_write_pix(fw, TBYTE, firstpix, rawimage->size(), planes[i].data(), &status);
|
||||
}
|
||||
break;
|
||||
case CV_16U:
|
||||
case RawImage::UINT16:
|
||||
fits_create_img(fw, USHORT_IMG, naxis, naxes, &status);
|
||||
for(int i=0; i<channels; i++)
|
||||
{
|
||||
firstpix[2] = i+1;
|
||||
fits_write_pix(fw, TUSHORT, firstpix, rawimage->size(), mat[i].data, &status);
|
||||
fits_write_pix(fw, TUSHORT, firstpix, rawimage->size(), planes[i].data(), &status);
|
||||
}
|
||||
break;
|
||||
case CV_32F:
|
||||
case RawImage::FLOAT32:
|
||||
fits_create_img(fw, FLOAT_IMG, naxis, naxes, &status);
|
||||
for(int i=0; i<channels; i++)
|
||||
{
|
||||
firstpix[2] = i+1;
|
||||
fits_write_pix(fw, TFLOAT, firstpix, rawimage->size(), mat[i].data, &status);
|
||||
fits_write_pix(fw, TFLOAT, firstpix, rawimage->size(), planes[i].data(), &status);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -645,13 +628,13 @@ void ConvertRunable::run()
|
||||
try
|
||||
{
|
||||
LibXISF::XISFWriter xisf;
|
||||
int channelCount = rawimage->mat().channels();
|
||||
int channelCount = rawimage->channels();
|
||||
LibXISF::Image::SampleFormat sampleFormat;
|
||||
switch(CV_MAT_DEPTH(rawimage->dataType()))
|
||||
switch(rawimage->type())
|
||||
{
|
||||
case CV_8U: sampleFormat = LibXISF::Image::UInt8; break;
|
||||
case CV_16U: sampleFormat = LibXISF::Image::UInt16; break;
|
||||
case CV_32F: sampleFormat = LibXISF::Image::Float32; break;
|
||||
case RawImage::UINT8: sampleFormat = LibXISF::Image::UInt8; break;
|
||||
case RawImage::UINT16: sampleFormat = LibXISF::Image::UInt16; break;
|
||||
case RawImage::FLOAT32: sampleFormat = LibXISF::Image::Float32; break;
|
||||
default: return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user