Как нарезать / разрезать изображение на кусочки - PullRequest
2 голосов
/ 02 февраля 2011

Итак, у меня есть функция, которая получает OpenCV-изображение и превращает его в оттенки серого.

    void UseLSD(IplImage* destination)
    {   
    IplImage *destinationForGS = cvCreateImage(cvSize(destination->width, destination->height),IPL_DEPTH_8U,1);
    cvCvtColor(destination,destinationForGS,CV_RGB2GRAY); 
}

Как теперь разделить это изображение на изображения размером 10x10 пикселей и повторить их?(ширина и высота не могут делиться на 10, но если будет некоторая потеря (например, потеря от 1 * ч до 9 * ч + 9 * ч пикселей на изображение), это будет нормально для меня.) Кстати, вы можете вывести один из 10* 10 изображений на экран.пожалуйста. * * 1004

Ответы [ 2 ]

4 голосов
/ 02 февраля 2011

Я думаю, что самое простое решение - использовать Регионы интересов.Вот образец

    /* load image */
    IplImage *img1 = cvLoadImage("elvita.jpg", 1);

    /* sets the Region of Interest 
       Note that the rectangle area has to be __INSIDE__ the image 
       You just iterate througt x and y.
   */
    cvSetImageROI(img1, cvRect(x*10, y*10, x*10 + 10, y*10 + 10));

    /* create destination image 
       Note that cvGetSize will return the width and the height of ROI */
    IplImage *img2 = cvCreateImage(cvGetSize(img1), 
                                   img1->depth, 
                                   img1->nChannels);

    /* copy subimage */
    cvCopy(img1, img2, NULL);

    /* always reset the Region of Interest */
    cvResetImageROI(img1);
4 голосов
/ 02 февраля 2011

Вы можете обрезать ваши изображения на маленькие кусочки, как это (итерация не проверена):

// source image
IplImage *source = cvLoadImage("lena.jpg", 1);
int roiSize = 10;
for(int j = 0; j < source->width/roiSize; ++j) {
    for(int i = 0; i < source->height/roiSize; ++i) {    
        cvSetImageROI(source, cvRect(i*roiSize, j*roiSize, roiSize, roiSize));

        // cropped image
        IplImage *cropSource = cvCreateImage(cvGetSize(source), source->depth, source->nChannels);

        // copy
        cvCopy(source, cropSource, NULL);

        // ... do what you want with your cropped image ...

        // always reset the ROI
        cvResetImageROI(source);
    }
}
...