Скопируйте часть изображения с помощью openCv С++
Я использую opencv, и я хочу создать изображение из части другого изображения.
Я не нашел функцию, которая делает это, поэтому я пытаюсь реализовать свою Идею, которая состоит в копировании пикселя изображения на пиксель, но напрасно я не получил результат, которого я жду.
У любого есть другая идея
код:
#include "cv.h"
#include "highgui.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main(int argc,char** argv) {
IplImage * img =0;
uchar *data;
int i,j,k;
int height,width,widthStep,nChannels;
img=cvLoadImage(argv[1],3);
height =img->height;
width = img->width;
widthStep= img->widthStep;
nChannels = img->nChannels;
data=(uchar*)img->imageData;
IplImage* img1=cvCreateImage(cvSize(height/2,width/2),IPL_DEPTH_8U,nChannels);
for(i=0;i<height/2;i++){
for(j=0;j<width/2;j++){
for(k=0;k<3;k++){
img1->imageData[i*widthStep+j*nChannels]=data[i*widthStep+j*nChannels];
}
}
}
cvShowImage("image_Originale2",img1);
cvWaitKey(0);
cvReleaseImage(&img);
return 0;
}
Ответы
Ответ 1
То, что вы пытаетесь выполнить, может быть выполнено путем установки ROI (Область интересов) на этом изображении и копирования этой части, определенной ROI, на новое изображение.
Вы можете увидеть демонстрацию используя IplImage
в этом сообщении.
Эти сообщения показывают использование ROI для решения различных сценариев:
Важно отметить, что ваш код использует интерфейс C OpenCV. Интерфейс С++ предлагает cv::Mat
, что эквивалентно IplImage
. Другими словами, то, что вы ищете, - это решение C.
Ответ 2
Вы должны использовать конструктор cv::Mat
copy. Это намного лучше, чем IplImage
:
int x = 10,
y = 20,
width = 200,
height = 200;
Mat img1, img2;
img1 = imread("Lenna.png");
img2 = img1(Rect(x, y, width, height));
Ответ 3
Использование конструктора копирования:
cv::Mat whole = ...; // from imread or anything else
cv::Mat part(
whole,
cv::Range( 20, 220 ), // rows
cv::Range( 10, 210 ));// cols
Ответ 4
Найдите функцию cvSetImageROI().
Устанавливает изображение Region of Interest (ROI) для заданного прямоугольника.