Я прочитал изображение (исходное изображение) в CvMat, используя cvLoadImage, и назначил его указатель на другой CvMat промежуточным блоком данных, а затем покажу этот CvMat с помощью cvShowImage, но отобразилась только небольшая область исходного изображения , в окне с тем же размером, что и исходное изображение.Как сохранить данные в изображении с помощью OpenCV?
char* filename = "image\\neuron.tif"; // an 8bits grayscale image
IplImage* iplImage = cvLoadImage(filename);
int width = iplImage->width;
int height = iplImage->height;
cvNamedWindow("Original", CV_WINDOW_AUTOSIZE);
cvShowImage("Original", iplImage); // showed properly
cvWaitKey();
CvMat* header = cvCreateMatHeader(height, width, CV_8UC1);
CvMat* img_mat = cvGetMat(iplImage, header);
unsigned char* img_host = (unsigned char*)malloc(height * width * sizeof(unsigned char));// the intermediate data block, on which I need to apply a cuda operation
img_host = img_mat->data.ptr;
CvMat* blur_mat = cvCreateMat(height, width, CV_8UC1);
blur_mat->data.ptr = img_host;
cvNamedWindow("Blurred", CV_WINDOW_AUTOSIZE);
cvShowImage("Blurred", blur_mat); // the problem described
cvWaitKey();
Собственно проблема возникла, когда я пытаюсь "img_host = img_mat-> data.ptr", но я понятия не имею, что это неправильно.
изменить cvLoadImage (имя файла) на cvLoadImage (имя файла, CV_LOAD_IMAGE_GRAYSCALE); – eyllanesc
Любая конкретная причина, по которой вы используете ** устаревший ** C api? – Miki
@Miki Я хотел бы иметь другие операции CUDA в матрице данных изображения, поэтому я выбрал C api ... действительно стыдно, что я разместил этот грязный код – Zhang