空了星轨

世界的真相是相反的吗?放大缩小,体验具体生活细节偏差的奇妙!details
(已弃:依戒生定,因定开慧!)

金字塔分割

#include <opencv2\highgui\highgui.hpp>

#include <opencv2\legacy\legacy.hpp>
#include <iostream>
using namespace std;
using namespace cv;


void Pyr_fenge(Mat img0, vector<Mat>& block0, int& n_comp, const int level = 3, const double threshold1=155.0, const double threshold2=52.0)
{
     

    int block_size = 1500;
    

    img0.cols &= -(1 << level);
    img0.rows &= -(1 << level);

    IplImage* image0 = &img0.operator _IplImage();
    IplImage* image1 = cvCloneIma
ge(image0);
    Mat img1(image1, 0);
    
    CvMemStorage *storage;
    storage = cvCreateMemStorage(block_size);
    CvSeq *comp;
    cvPyrSegmentation(image0, image1, storage, &comp,
        level, threshold1, threshold2);

    n_comp = comp->total; 
    block0.reserve(n_comp);
     
    for (int i = 0, k = 0; i < (comp ? comp->total : 0); i++)
    {
        CvConnectedComp* cc = (CvConnectedComp*)cvGetSeqElem(comp, i);

        if (cc->rect.height * cc->rect.width >500)

        {
             
            //img0(cc->rect).copyTo(block);
            block0.push_back(img0(cc->rect));                                  
            k++;
        }

    }
    //cvClearSeq(comp); cout << "w" << endl;
    //cvReleaseMemStorage(&storage);
    //cvReleaseImage(&image0);
    //cvReleaseImage(&image1);

}






int main(int argc, char** argv)
{
    char* filename = argc == 2 ? argv[1] : (char*)"picture0.jpg";
    Mat img0; img0 = imread(filename, 1);
    if (img0.cols == 0)
        return -1;
    
    vector<Mat> block; int n_comp=0;  
    Pyr_fenge(img0, block, n_comp);
    
    cout << "n_comp =" << n_comp << endl;
    cout << "block.size() =" << block.size() << endl;
    char path[30];
    for (int k = 0; k < block.size(); k++)
    {
        sprintf_s(path, "fruit%d", k);
        imshow(path, block[k]);
    }
    
    waitKey();
    return 0;
}

评论

© 空了星轨 | Powered by LOFTER