void CvFaceElement::FindRects(IplImage* img, IplImage* thresh, int nLayers, int dMinSize) { FindContours(img, thresh, nLayers, dMinSize / 4); if (0 == m_seqRects->total) return; Energy(); cvSeqSort(m_seqRects, CompareEnergy, NULL); CvTrackingRect* pR = (CvTrackingRect*)cvGetSeqElem(m_seqRects, 0); if (m_seqRects->total < 32) { MergeRects(dMinSize / 8); Energy(); cvSeqSort(m_seqRects, CompareEnergy, NULL); } pR = (CvTrackingRect*)cvGetSeqElem(m_seqRects, 0); if ((pR->iEnergy > 100 && m_seqRects->total < 32) || (m_seqRects->total < 16)) { MergeRects(dMinSize / 4); Energy(); cvSeqSort(m_seqRects, CompareEnergy, NULL); } pR = (CvTrackingRect*)cvGetSeqElem(m_seqRects, 0); if ((pR->iEnergy > 100 && m_seqRects->total < 16) || (pR->iEnergy > 200 && m_seqRects->total < 32)) { MergeRects(dMinSize / 2); Energy(); cvSeqSort(m_seqRects, CompareEnergy, NULL); } }// void CvFaceElement::FindRects(IplImage* img, IplImage* thresh, int nLayers, int dMinSize)
//--------------------------------------------------------------------------- void TFormAmplifier::OnAfterResize() { //Use { const std::vector<std::vector<TRect> > v(GetRectsGrid(ClientRect,9,1)); //Resize bitmaps //ImageFader1->Picture->Bitmap->Height = MergeRects(v[4][2],v[6][2]).Height(); //ImageFader1->Refresh(); //Place bitmaps //Labels //Controls PlaceInCenter(ImageTapButtonPower,v[0][1]); PlaceInCenter(ImageTapButtonPlay,v[0][3]); PlaceInCenter(ImageTapButtonStop,v[0][4]); //Others //Displays PlaceInCenter(ImageLedPower,v[0][0]); PlaceInCenter(ImageLcdSymbolPlay,v[0][6]); PlaceInCenter(ImageAudioSignalL,v[0][7]); PlaceInCenter(ImageAudioSignalR,v[0][8]); } //Connect { const std::vector<std::vector<TRect> > v(GetRectsGrid(ClientRect,5,2)); //Labels PlaceInCenter(LabelConnectOut,MergeRects(v[0][2],v[0][3])); //Connectors PlaceInCenter(ImageCinchFemaleOutL,v[1][2]); PlaceInCenter(ImageCinchFemaleOutR,v[1][3]); PlaceInCenter(ImagePlug220Power ,v[1][4]); } }
void MSHCD(HAAR *m, const char* imagefile, const char* haarcasadefile) { assert(sizeof(u8) == 1); assert(sizeof(u16) == 2); assert(sizeof(u32) == 4); assert(sizeof(u64) == 8); m->n_objects = 0; m->objects = (Rectangle**)malloc(MAX_OBJECTS * sizeof(Rectangle*)); m->haarcascade.ScaleUpdate = 1.0/1.3; GetHaarCascade(haarcasadefile, &m->haarcascade); // get classifer from file GetIntergralImages(imagefile, &m->image); // calculate integral image #ifdef DO_CANNY_PURGE GetIntegralCanny(&m->image); // calculate integral canny image #endif HaarCasadeObjectDetection(m); // start detection MergeRects(m, 1); // merge found results PrintDetectionResult(m); // show detection result #ifdef WITH_OPENCV ShowDetectionResult(imagefile, m); #endif }
STDMETHODIMP CSubPicExImpl::SetDirtyRectEx(CAtlList<CRect>* dirtyRectList) { if(dirtyRectList!=NULL) { m_rectListDirty.RemoveAll(); m_rcDirty.SetRectEmpty(); POSITION tagPos = NULL; POSITION pos = dirtyRectList->GetHeadPosition(); while(pos!=NULL) { m_rcDirty |= dirtyRectList->GetNext(pos); } MergeRects(*dirtyRectList, &m_rectListDirty); return S_OK; } return E_POINTER; }
//--------------------------------------------------------------------------- void TFormAlesisMultimix8::OnAfterResize() { //Use { const std::vector<TRect> v(GetRectsHorizontal(ClientRect,3)); PlaceInCenter(ImageAudioSignal,v[2]); const std::vector<TRect> v1(GetRectsVertical(v[0],5)); const std::vector<TRect> v2(GetRectsVertical(v[1],5)); ImageFader1->Picture->Bitmap->Height = MergeRects(v1[1],v1[3]).Height(); ImageFader1->Refresh(); ImageFaderMaster->Picture->Bitmap->Height = MergeRects(v2[1],v2[3]).Height(); ImageFaderMaster->Refresh(); PlaceInCenter(ImageUse1 ,v1[0]); PlaceInCenter(ImageFader1,MergeRects(v1[1],v1[3])); PlaceInCenter(ImageUseMaster ,v2[0]); PlaceInCenter(ImageFaderMaster,MergeRects(v2[1],v2[3])); } //Connect { const std::vector<TRect> v(GetRectsHorizontal(ClientRect,4)); const std::vector<TRect> v0(GetRectsVertical(v[0],6)); const std::vector<TRect> v1(GetRectsVertical(v[1],6)); const std::vector<TRect> v2(GetRectsVertical(v[2],6)); const std::vector<TRect> v3(GetRectsVertical(v[3],6)); PlaceInCenter(ImageConnectMic ,v0[1]); PlaceInCenter(ImageConnect1 ,v0[2]); PlaceInCenter(ImageConnectMaster,MergeRects(v1[1],v2[1])); PlaceInCenter(ImageConnectL ,v1[2]); PlaceInCenter(ImageConnectR ,v2[2]); PlaceInCenter(ImageConnectPower ,v3[2]); PlaceInCenter(ImageXlrFemaleMic1 ,MergeRects(v0[3],v0[4])); PlaceInCenter(ImageXlrMaleMasterLeft ,MergeRects(v1[3],v1[4])); PlaceInCenter(ImageXlrMaleMasterRight,MergeRects(v2[3],v2[4])); PlaceInCenter(ImageEuroMalePower ,MergeRects(v3[3],v3[4])); } }
void nsRegion::SimplifyOutwardByArea(uint32_t aThreshold) { pixman_box32_t *boxes; int n; boxes = pixman_region32_rectangles(&mImpl, &n); // if we have no rectangles then we're done if (!n) return; pixman_box32_t *end = boxes + n; pixman_box32_t *topRectsEnd = boxes+1; pixman_box32_t *topRects = boxes; // we need some temporary storage for merging both rows of rectangles nsAutoTArray<pixman_box32_t, 10> tmpStorage; tmpStorage.SetCapacity(n); pixman_box32_t *tmpRect = tmpStorage.Elements(); pixman_box32_t *destRect = boxes; pixman_box32_t *rect = tmpRect; // find the end of the first span of rectangles while (topRectsEnd < end && topRectsEnd->y1 == topRects->y1) { topRectsEnd++; } // if we only have one row we are done if (topRectsEnd == end) return; pixman_box32_t *bottomRects = topRectsEnd; pixman_box32_t *bottomRectsEnd = bottomRects+1; do { // find the end of the bottom span of rectangles while (bottomRectsEnd < end && bottomRectsEnd->y1 == bottomRects->y1) { bottomRectsEnd++; } uint32_t totalArea = ComputeMergedAreaIncrease(topRects, topRectsEnd, bottomRects, bottomRectsEnd); if (totalArea <= aThreshold) { // merge the rects into tmpRect rect = MergeRects(topRects, topRectsEnd, bottomRects, bottomRectsEnd, tmpRect); // copy the merged rects back into the destination topRectsEnd = CopyRow(destRect, tmpRect, rect); topRects = destRect; bottomRects = bottomRectsEnd; destRect = topRects; } else { // copy the unmerged rects destRect = CopyRow(destRect, topRects, topRectsEnd); topRects = bottomRects; topRectsEnd = bottomRectsEnd; bottomRects = bottomRectsEnd; if (bottomRectsEnd == end) { // copy the last row when we are done topRectsEnd = CopyRow(destRect, topRects, topRectsEnd); } } } while (bottomRectsEnd != end); uint32_t reducedCount = topRectsEnd - pixman_region32_rectangles(&this->mImpl, &n); // pixman has a special representation for // regions of 1 rectangle. So just use the // bounds in that case if (reducedCount > 1) { // reach into pixman and lower the number // of rects stored in data. this->mImpl.data->numRects = reducedCount; } else { *this = GetBounds(); } }
//--------------------------------------------------------------------------- void TFormSimpleSound4::OnAfterResize() { //Use { const std::vector<std::vector<TRect> > v(GetRectsGrid(ClientRect,11,9)); //Resize bitmaps ImageFader1->Picture->Bitmap->Height = MergeRects(v[5][2],v[7][2]).Height(); ImageFader2->Picture->Bitmap->Height = MergeRects(v[5][3],v[7][3]).Height(); ImageFader3->Picture->Bitmap->Height = MergeRects(v[5][4],v[7][4]).Height(); ImageFader4->Picture->Bitmap->Height = MergeRects(v[5][5],v[7][5]).Height(); ImageFaderMaster->Picture->Bitmap->Height = MergeRects(v[5][6],v[7][7]).Height(); ImageFader1->Refresh(); ImageFader2->Refresh(); ImageFader3->Refresh(); ImageFader4->Refresh(); ImageFaderMaster->Refresh(); //Place bitmaps //Labels PlaceInCenter(LabelUse1,v[0][2]); PlaceInCenter(LabelUse2,v[0][3]); PlaceInCenter(LabelUse3,v[0][4]); PlaceInCenter(LabelUse4,v[0][5]); PlaceInCenter(LabelUseGain,MergeRects(v[1][0],v[1][1])); PlaceInCenter(LabelUseAux1,MergeRects(v[2][0],v[2][1])); PlaceInCenter(LabelUseAux2,MergeRects(v[3][0],v[3][1])); PlaceInCenter(LabelUsePfl,MergeRects(v[4][0],v[4][1])); PlaceInCenter(LabelUseMaster,MergeRects(v[4][6],v[4][7])); PlaceInCenter(LabelUseSend,MergeRects(v[1][6],v[1][7])); PlaceInCenter(LabelUseSimpleSound4,MergeRects(v[0][8],v[1][10])); //Controls //#1 PlaceInCenter(ImageDialGain1,v[1][2]); PlaceInCenter(ImageDialAux1_1,v[2][2]); PlaceInCenter(ImageDialAux2_1,v[3][2]); PlaceInCenter(ImagePressButtonPfl1,v[4][2]); PlaceInCenter(ImageFader1,MergeRects(v[5][2],v[7][2])); //#2 PlaceInCenter(ImageDialGain2,v[1][3]); PlaceInCenter(ImageDialAux1_2,v[2][3]); PlaceInCenter(ImageDialAux2_2,v[3][3]); PlaceInCenter(ImagePressButtonPfl2,v[4][3]); PlaceInCenter(ImageFader2,MergeRects(v[5][3],v[7][3])); //#3 PlaceInCenter(ImageDialGain3,v[1][4]); PlaceInCenter(ImageDialAux1_3,v[2][4]); PlaceInCenter(ImageDialAux2_3,v[3][4]); PlaceInCenter(ImagePressButtonPfl3,v[4][4]); PlaceInCenter(ImageFader3,MergeRects(v[5][4],v[7][4])); //#4 //Channel 4 has no gain PlaceInCenter(ImageDialAux1_4,v[2][5]); PlaceInCenter(ImageDialAux2_4,v[3][5]); PlaceInCenter(ImagePressButtonPfl4,v[4][5]); PlaceInCenter(ImageFader4,MergeRects(v[5][5],v[7][5])); //Others PlaceInCenter(ImageDialSendAux1,MergeRects(v[2][6],v[2][7])); PlaceInCenter(ImageDialSendAux2,MergeRects(v[3][6],v[3][7])); PlaceInCenter(ImageFaderMaster,MergeRects(v[5][6],v[7][7])); //Displays PlaceInCenter(ImageAudioSignal,MergeRects(v[2][8],v[7][10])); } //Connect { const std::vector<std::vector<TRect> > v(GetRectsGrid(ClientRect,6,5)); //Labels PlaceInCenter(LabelConnectMic1 ,v[0][0]); PlaceInCenter(LabelConnect1 ,v[1][0]); PlaceInCenter(LabelConnectMic2 ,v[0][1]); PlaceInCenter(LabelConnect2 ,v[1][1]); PlaceInCenter(LabelConnectMic3 ,v[0][2]); PlaceInCenter(LabelConnect3 ,v[1][2]); PlaceInCenter(LabelConnect4 ,v[1][3]); PlaceInCenter(LabelConnectAux1 ,v[3][4]); PlaceInCenter(LabelConnectAux2 ,v[3][5]); PlaceInCenter(LabelConnectMaster,MergeRects(v[0][4],v[0][5])); PlaceInCenter(LabelConnectL ,v[1][4]); PlaceInCenter(LabelConnectR ,v[1][5]); PlaceInCenter(LabelConnectPower ,MergeRects(v[4][1],v[4][2]));; //Connectors PlaceInCenter(ImageXlrFemaleMic1 ,MergeRects(v[2][0],v[3][0]));; PlaceInCenter(ImageXlrFemaleMic2 ,MergeRects(v[2][1],v[3][1]));; PlaceInCenter(ImageXlrFemaleMic3 ,MergeRects(v[2][2],v[3][2]));; PlaceInCenter(ImageCinchFemaleWhite4 ,v[2][3]); PlaceInCenter(ImageCinchFemaleRed4 ,v[3][3]); PlaceInCenter(ImageJackFemaleAux1 ,v[4][4]); PlaceInCenter(ImageJackFemaleAux2 ,v[4][5]); PlaceInCenter(ImageXlrMaleMasterLeft ,v[2][4]); PlaceInCenter(ImageXlrMaleMasterRight,v[2][5]); PlaceInCenter(ImageEuroMalePower ,v[4][0]); } }