Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}