Пример OpenCV c ++ для кода iOS и UIImage

У меня есть вопрос об OpenCV.
У меня есть пример C ++, и я бы портировать этот пример в моем проекте iOS.
Я решил все проблемы с компилятором.
Мне нужно конвертировать этот код C ++:

char* filename;
Mat input_image;

//Check if user specify image to process
if(argc >= 2 )
{
filename= argv[1];
//load image  in gray level
input_image=imread(filename,1);
}else{
printf("Use:\n\t%s image\n",argv[0]);
return 0;
}

У меня есть UIImage и я бы получил соответствующий Mat input_image.
Что такое соответствующий код

//load image  in gray level
input_image=imread(filename,1);?

Я пытался это, но у меня есть некоторые проблемы, и я не думаю, что это правильный код, который соответствует imread(filename,1);

- (cv::Mat)cvMatFromUIImage:(UIImage *)image
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGFloat cols = image.size.width;
CGFloat rows = image.size.height;

cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha)

CGContextRef contextRef = CGBitmapContextCreate(cvMat.data,                 // Pointer to  data
cols,                       // Width of bitmap
rows,                       // Height of bitmap
8,                          // Bits per component
cvMat.step[0],              // Bytes per row
colorSpace,                 // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags

CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
CGContextRelease(contextRef);

return cvMat;
}

1

Решение

Код iOS, который вы добавили в свой вопрос, идеально подходит для преобразования UIImage в Mat (не делая его в оттенках серого) ….

input_image=imread(filename,1);

Приведенная выше строка кода используется для загрузки изображения из имени файла (это путь к изображению), а 1 — для отображения в градациях серого,

Итак, для загрузки изображения из имени файла, в IOS мы используем его как:

UIImage *image=[UIImage imagenamed:@"Hello.png"];

и передача этого изображения вашему методу сделает вашу работу, теперь для создания полутонового Mat, внесите следующие изменения в ваш код как:

Заменить следующие строки:

CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
cv::Mat cvMat(rows, cols, CV_8UC4);

С

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
cv::Mat cvMat = cv::Mat(rows, cols, CV_8UC1);

и добавить эту строку в конце

CGColorSpaceRelease(colorSpace);
1

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

Других решений пока нет …

По вопросам рекламы [email protected]