std::pair<Pothos::BufferChunk, Pothos::BufferChunk> Pothos::BufferChunk::convertComplex(const DType &outDType, const size_t numElems_) const { const size_t numElems = (numElems_ == 0)? this->elements() : numElems_; const auto primElems = (numElems*this->dtype.size())/this->dtype.elemSize(); const auto outElems = primElems*outDType.size()/outDType.elemSize(); auto it = getBufferConvertImpl().convertComplexMap.find(dtypeIOToHash(this->dtype, outDType)); if (it == getBufferConvertImpl().convertComplexMap.end()) throw Pothos::BufferConvertError( "Pothos::BufferChunk::convertComplex("+dtype.toString()+")", "cant convert from " + this->dtype.toString()); Pothos::BufferChunk outRe(outDType, outElems); Pothos::BufferChunk outIm(outDType, outElems); it->second(this->as<const void *>(), outRe.as<void *>(), outIm.as<void *>(), primElems); return std::make_pair(outRe, outIm); }
void imCrop(const string &outPath, const string &inPath, const Rect& outRec,const Size& tileSz,const Size& gridDim, const string &fileName) { // check validity Point tl = outRec.tl(); Point br = outRec.br(); Size sz = outRec.size(); Size fullSz(tileSz.width * gridDim.width, tileSz.height * gridDim.height); printf("tl: %d, %d/br: %d, %d\n", tl.x, tl.y, br.x, br.y); assert(br.x > 0 && br.y > 0 && tl.x < fullSz.width && tl.y < fullSz.height); Mat outIm(sz, CV_32FC1); printf("size of outIm: w: %d, h: %d\n", outIm.size().width, outIm.size().height); Point relTL; // relTL is relative to top-left of outIm int startX = tl.x / tileSz.width; int endX = br.x / tileSz.width; int startY = tl.y / tileSz.height; int endY = br.y / tileSz.height; printf("start: (%d, %d), end: (%d, %d)\n", startX, startY, endX, endY); for (int i = startY; i <= endY; i++) { for (int j = startX; j <= endX; j++) { if (i < 0 || i >= gridDim.height || j < 0 || j >= gridDim.width) continue; Mat temp; printf("j: %d, i: %d\n", j, i); relTL.x = tileSz.width * j - tl.x; relTL.y = tileSz.height * i - tl.y; printf("relTL.x: %d, relTL.y: %d\n", relTL.x, relTL.y); loadGridIm(inPath, makePt(j, i), temp, tileSz.width, tileSz.height); blit(temp, outIm, relTL); } } ostringstream ss; ss << outPath << "/" << fileName << ".tiff"; string s = ss.str(); saveFloatTiff(s, outIm); }