Как я могу преобразовать в двоичную форму CGImage, используя OpenCV на iOS?

В моем проекте iOS у меня есть CGImage в RGB, который я хотел бы преобразовать в двоичную форму (преобразовать в черно-белое изображение). Я хотел бы использовать OpenCV для этого, но я новичок в OpenCV. Я нашел книгу по OpenCV, но она была не для iPhone.

Как я могу преобразовать в двоичную форму такое изображение, используя OpenCV на iOS?

 Mark Ransom07 июн. 2012 г., 19:49
Под бинарным вы подразумеваете чистый черный и белый? И почему iPhone будет иметь значение?
 Dani08 июн. 2012 г., 14:47
На самом деле я не хочу использовать cvNamedWindow и cvDestroyWindow в моем коде проекта iOS. потому что я думаю, что в iOS нет концепции окна. Все отображается на представлениях.
 Dani07 июн. 2012 г., 21:02
Да, я имею в виду чисто черно-белое изображение. для iPhone на самом деле я новичок в openCV, и я немного запутался в cvNamedWindow и cvDestroyWindow.
 karlphillip07 июн. 2012 г., 21:47
cvNamedWindow() создает окно,cvShowImage() отображает изображение внутри этого окна,cvWaitKey(0) заставляет окно оставаться открытым, пока пользователь не нажмет клавишу, и в конце вашей программы должно бытьcvDestroyWindow() освободить ресурсы, ранее выделенные окну. Здесь множество примеров, используйте окно поиска.

Ответы на вопрос(3)

То, что вы хотите сделать, это удалить низкий уровень изменений и оставить высокий уровень изменений, это фильтр верхних частот. У меня есть опыт работы только с обработкой аудиосигнала, поэтому я не знаю, какие варианты доступны для вас, но это направление, в котором я буду искать.

Решение Вопроса

Если вы не хотите устанавливать OpenCV в своем проекте iOS, мой открытый исходный кодGPUImage В каркасе есть два пороговых фильтра для бинаризации изображений, простой порог и адаптивный, основанный на локальной яркости около пикселя.

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

UIImage *inputImage = [UIImage imageNamed:@"inputimage.png"];    
GPUImageLuminanceThresholdFilter *thresholdFilter = [[GPUImageLuminanceThresholdFilter alloc] init];
thresholdFilter.threshold = 0.5;
UIImage *thresholdFilter = [thresholdFilter imageByFilteringImage:inputImage];

(Отключите фильтр выше, если не используете ARC в вашем приложении)

Если вы хотите вместо этого отобразить это изображение на экране, вы можете отправить пороговый вывод в GPUImageView. Вы также можете обрабатывать видео в реальном времени с этими фильтрами, если хотите, потому что они запускаются полностью на GPU.

Взгляни наcv::threshold() ADN PassthresholdType какcv::THRESH_BINARY:

double cv::threshold(const cv::Mat& src, 
                     cv::Mat& dst, 
                     double thresh, 
                     double maxVal, 
                     int thresholdType)

Этот пример использует интерфейс C OpenCV для преобразования изображения в черно-белое изображение белый.

Ваш ответ на вопрос