openCv обрезать изображение

У меня проблемы с обрезкой OpenCv IplImage. Предполагая, что и tmp, и img являются IplImage *. Используя код:

printf("Orig dimensions: %dx%d\n", img->width, img->height);
cvSetImageROI(img, cvRect(0, 0,500,500));
tmp = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
cvCopy(img, tmp, NULL);
cvResetImageROI(img);
img = cvCloneImage(tmp);
printf("Orig dimensions after crop: %dx%d\n", tmp->width, tmp->height);

когда я использую cvRect выше, я получу обрезанное изображение размером 500 x 500, как и ожидалось, однако, когда я использую прямоугольник (400 400 500 500), я получу изображение размером 500 X 320.

11

Решение

cvRect определяется как ( int x, int y, int width, int height )не (int left, int top, int right, int bottom), Итак, вы выбираете регион 500х500, начиная с точки (x,y) = (400,400), Я предполагаю, что высота вашего изображения составляет 720;).

32

Другие решения

Обрезка изображения с использованием OpenCV

Mat image=imread("image.png",1);

int startX=200,startY=200,width=100,height=100

Mat ROI(image, Rect(startX,startY,width,height));

Mat croppedImage;

// Copy the data into new matrix
ROI.copyTo(croppedImage);

imwrite("newImage.png",croppedImage);
3

Вы можете легко обрезать изображение в Python с помощью

roi = oriImage[refPoint[0][1]:refPoint[1][1], refPoint[0][0]:refPoint[1][0]]

Для того, чтобы получить два очка вы можете позвонить cv2.setMouseCallback("image", mouse_crop),
Функция примерно такая

def mouse_crop(event, x, y, flags, param):
# grab references to the global variables
global x_start, y_start, x_end, y_end, cropping

# if the left mouse button was DOWN, start RECORDING
# (x, y) coordinates and indicate that cropping is being
if event == cv2.EVENT_LBUTTONDOWN:
x_start, y_start, x_end, y_end = x, y, x, y
cropping = True

# Mouse is Moving
elif event == cv2.EVENT_MOUSEMOVE:
if cropping == True:
x_end, y_end = x, y

# if the left mouse button was released
elif event == cv2.EVENT_LBUTTONUP:
# record the ending (x, y) coordinates
x_end, y_end = x, y
cropping = False # cropping is finished

refPoint = [(x_start, y_start), (x_end, y_end)]

if len(refPoint) == 2: #when two points were found
roi = oriImage[refPoint[0][1]:refPoint[1][1], refPoint[0][0]:refPoint[1][0]]
cv2.imshow("Cropped", roi)
cv2.imwrite("crop.jpg",roi)

Вы можете получить подробную информацию здесь: Щелчок мыши и обрезка с использованием Python

0

Попробуй это. Это работа.

                     IplImage *source_image;
IplImage *cropped_Image1;

cout << "Width:" << source_image->width << " pixels" << endl;
cout << "Height:" << source_image->height << " pixels" << endl;
int width = source_image->width;
int lenght = source_image->height;

cv::Rect roi;
roi.x = 1200; //1200     // 950
roi.y = 355; //350      //150
roi.width = 2340; //2360          //2750
roi.height = 1425;  //1235 /2500         //2810   //2465 fully braille sheetcropped_Image1 = cvCreateImage(cvSize(roi.width, roi.height), source_image->depth, source_image->nChannels);
cvSetImageROI(source_image, roi);
cvCopy(source_image, cropped_Image1);
cvResetImageROI(source_image);
cvShowImage("Cropped Image", cropped_Image1);
cvSaveImage("1_cropped.jpg", cropped_Image1);
0
По вопросам рекламы [email protected]