本文整理汇总了C++中CBlob::getBBox方法的典型用法代码示例。如果您正苦于以下问题:C++ CBlob::getBBox方法的具体用法?C++ CBlob::getBBox怎么用?C++ CBlob::getBBox使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBlob
的用法示例。
在下文中一共展示了CBlob::getBBox方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: blobify
void Blobs::blobify()
{
uint32_t i, j, k;
bool colorCode;
CBlob *blob;
uint16_t *blobsStart;
uint16_t numBlobsStart, invalid, invalid2;
uint16_t left, top, right, bottom;
//uint32_t timer, timer2=0;
unpack();
// copy blobs into memory
invalid = 0;
// mutex keeps interrupt routine from stepping on us
m_mutex = true;
for (i=0, m_numBlobs=0; i<NUM_MODELS; i++)
{
colorCode = m_clut->getType(i+1)==CL_MODEL_TYPE_COLORCODE;
for (j=m_numBlobs*5, k=0, blobsStart=m_blobs+j, numBlobsStart=m_numBlobs, blob=m_assembler[i].finishedBlobs;
blob && m_numBlobs<m_maxBlobs && k<m_maxBlobsPerModel; blob=blob->next, k++)
{
if ((colorCode && blob->GetArea()<MIN_COLOR_CODE_AREA) ||
(!colorCode && blob->GetArea()<(int)m_minArea))
continue;
blob->getBBox((short &)left, (short &)top, (short &)right, (short &)bottom);
m_blobs[j + 0] = i+1;
m_blobs[j + 1] = left;
m_blobs[j + 2] = right;
m_blobs[j + 3] = top;
m_blobs[j + 4] = bottom;
m_numBlobs++;
j += 5;
}
//setTimer(&timer);
if (!colorCode) // do not combine color code models
{
while(1)
{
invalid2 = combine2(blobsStart, m_numBlobs-numBlobsStart);
if (invalid2==0)
break;
invalid += invalid2;
}
}
//timer2 += getTimer(timer);
}
//setTimer(&timer);
invalid += combine(m_blobs, m_numBlobs);
if (m_codedMode)
{
m_codedBlobs = (BlobB *)(m_blobs + m_numBlobs*5);
// calculate number of codedblobs left
processCoded();
}
if (invalid || m_codedMode)
{
invalid2 = compress(m_blobs, m_numBlobs);
m_numBlobs -= invalid2;
}
//timer2 += getTimer(timer);
//cprintf("time=%d\n", timer2); // never seen this greater than 200us. or 1% of frame period
// reset read index-- new frame
m_blobReadIndex = 0;
m_mutex = false;
// free memory
for (i=0; i<NUM_MODELS; i++)
m_assembler[i].Reset();
#if 0
static int frame = 0;
if (m_numBlobs>0)
cprintf("%d: blobs %d %d %d %d %d\n", frame, m_numBlobs, m_blobs[1], m_blobs[2], m_blobs[3], m_blobs[4]);
else
cprintf("%d: blobs 0\n", frame);
frame++;
#endif
}
示例2: blobify
void Blobs::blobify()
{
//mm not entirely sure yet, but I think this function might just "draw" the blobs, based on the color model of each pixel. the color model is already determined in the "packed" data (see unpack...color model information is extracted from the packed data there...)
uint32_t i, j, k;
CBlob *blob;
uint16_t *blobsStart;
uint16_t numBlobsStart, invalid, invalid2;
uint16_t left, top, right, bottom;
//uint32_t timer, timer2=0;
unpack(); //mm as is clear in unpack(), at this point, we already know the model to which each blob belongs.
// copy blobs into memory //mm does this refer to the unpack() above??
invalid = 0;
// mutex keeps interrupt routine from stepping on us
m_mutex = true;
//mm iterate through models:
for (i=0, m_numBlobs=0; i<NUM_MODELS; i++)
{
//mm iterate through blobs in this model:
for (j=m_numBlobs*5, k=0, blobsStart=m_blobs+j, numBlobsStart=m_numBlobs, blob=m_assembler[i].finishedBlobs;
blob && m_numBlobs<m_maxBlobs && k<m_maxBlobsPerModel; blob=blob->next, k++)
{
if (blob->GetArea()<(int)m_minArea)
continue;
blob->getBBox((short &)left, (short &)top, (short &)right, (short &)bottom);
m_blobs[j + 0] = i+1;
m_blobs[j + 1] = left;
m_blobs[j + 2] = right;
m_blobs[j + 3] = top;
m_blobs[j + 4] = bottom;
m_numBlobs++;
j += 5;
}
//setTimer(&timer);
if (true)
{
while(1)
{
invalid2 = combine2(blobsStart, m_numBlobs-numBlobsStart);
if (invalid2==0)
break;
invalid += invalid2;
}
}
//timer2 += getTimer(timer);
}
//setTimer(&timer);
invalid += combine(m_blobs, m_numBlobs);
if (false)
{
m_codedBlobs = (BlobB *)(m_blobs + m_numBlobs*5);
processCoded();
}
if (invalid)
{
invalid2 = compress(m_blobs, m_numBlobs);
m_numBlobs -= invalid2;
if (invalid2!=invalid)
cprintf("**** %d %d\n", invalid2, invalid);
}
//timer2 += getTimer(timer);
//cprintf("time=%d\n", timer2); // never seen this greater than 200us. or 1% of frame period
// reset read index-- new frame
m_blobReadIndex = 0;
m_mutex = false;
// free memory
for (i=0; i<NUM_MODELS; i++)
m_assembler[i].Reset();
#if 0
static int frame = 0;
if (m_numBlobs>0)
cprintf("%d: blobs %d %d %d %d %d\n", frame, m_numBlobs, m_blobs[1], m_blobs[2], m_blobs[3], m_blobs[4]);
else
cprintf("%d: blobs 0\n", frame);
frame++;
#endif
}
示例3: cc_getMaxBlob
int32_t cc_getMaxBlob(uint32_t *qvals, uint32_t numRls, int16_t *bdata)
{
int16_t* c_components = new int16_t[MAX_BLOBS*4];
uint32_t result;//, prebuf;
CBlobAssembler blobber;
int32_t row;
uint32_t i, startCol, length;
uint8_t model;
for (i=0, row=-1; i<numRls; i++)
{
if (qvals[i]==0)
{
row++;
continue;
}
model = qvals[i]&0x03;
qvals[i] >>= 3;
startCol = qvals[i]&0x1ff;
qvals[i] >>= 9;
length = qvals[i]&0x1ff;
if(!handleRL(&blobber, model, row, startCol, length))
break;
}
blobber.EndFrame();
blobber.SortFinished();
int16_t top, right, bottom, left;
CBlob *blob;
blob = blobber.finishedBlobs;
if (blob->GetArea()>MIN_AREA)
{
blob->getBBox(left, top, right, bottom);
bdata[0] = left;
bdata[1] = right;
bdata[2] = top;
bdata[3] = bottom;
}
else
bdata[0] = -1;
#if 0
//
// Take Finished blobs and return with chirp
//
CBlob *blob, *temp;
blob = blobber.finishedBlobs;
uint32_t cc_num = 0;
temp = blob;
while (temp)
{
int16_t top, right, bottom, left;
temp->getBBox(left, top, right, bottom);
// Don't want objects with area less than 9...
if ((right-left)*(bottom-top) < 9)
break;
temp = temp->next;
cc_num++;
}
// Remove the rest that we don't care about
/*while(temp)
{
CBlob *next = temp->next;
temp->~CBlob();
temp = NULL;
temp = next;
}*/
cc_num = (cc_num < 15) ? cc_num : MAX_BLOBS;
// Populate return w/ result
//void* mem = malloc(sizeof(int16_t)*cc_num*4);
//if (mem == NULL)
// int i = 0;
//free(mem);
//int16_t* c_components = new int16_t[cc_num*4];
//g_mem += sizeof(int16_t)*cc_num*4;
memset((void *)c_components, 0, sizeof(uint16_t)*cc_num*4);
for (int i = 0; i < cc_num; i++)
{
int16_t top, right, bottom, left;
blob->getBBox(left, top, right, bottom);
c_components[(i*4)+0] = top;
c_components[(i*4)+1] = right;
c_components[(i*4)+2] = bottom;
c_components[(i*4)+3] = left;
blob = blob->next;
}
//.........这里部分代码省略.........