Мне нужно определить, содержит ли png-изображение любую прозрачность - какой был бы наиболее эффективный код для достижения этого?Обнаружение прозрачности на изображении
ответ
Преобразование png в pixelbuffer и использование vimage для вычисления гистограмм цветовых распределений. Затем проверьте гистограмму альфа-канала. vimage намного быстрее, чем через пиксели один за другим.
CVPixelBufferRef pxbuffer = NULL;
vImagePixelCount histogramA[256];
vImagePixelCount histogramR[256];
vImagePixelCount histogramG[256];
vImagePixelCount histogramB[256];
vImagePixelCount *histogram[4];
histogram[0] = histogramA;
histogram[1] = histogramR;
histogram[2] = histogramG;
histogram[3] = histogramB;
vImage_Buffer vbuff;
vbuff.height = CVPixelBufferGetHeight(pxbuffer);
vbuff.width = CVPixelBufferGetWidth(pxbuffer);
vbuff.rowBytes = CVPixelBufferGetBytesPerRow(pxbuffer);
vbuff.data = pxbuffer;
vImage_Error err=vImageHistogramCalculation_ARGB8888 (&vbuff,histogram, 0);
if (err != kvImageNoError) NSLog(@"%ld", err);
BOOL transparent;
for(int i=1;i<256;i++){
if(histogram[0][i]>0) transparent=YES;
}
vimage предполагает, что цвета заказаны ARGB в буфере. Если у вас есть что-то еще, например. BGRA, вы просто проверяете гистограмму [3] [i].
Еще быстрее, возможно, сначала разбить буфер на четыре планарных буфера, используя vImageConvert_ARGB8888toPlanar8, а затем просто выполнить расчет гистограммы в буфере альфа, используя vImageHistogramCalculation_Planar8.
Если вы находитесь на iOS7, а позже вы можете открыть png как CGImage и использовать vImageBuffer_initWithCGImage, чтобы преобразовать его непосредственно в буфер vimage (см. Сеанс 703 на WWDC 2014).
Наконец, альтернативой будет использование Core Image для расчета гистограммы.
- 1. Обнаружение объектов на изображении
- 2. Обнаружение объектов на изображении
- 3. Обнаружение касания на изображении
- 4. Обнаружение текстуры на изображении
- 5. Обнаружение текстуры на изображении
- 6. Обнаружение прямых линий на изображении
- 7. Обнаружение черного пикселя на изображении
- 8. обнаружение контуров текста на изображении
- 9. Обнаружение касания на растровом изображении
- 10. Обнаружение столкновений на повернутом изображении
- 11. Slick2D - Обнаружение мыши на изображении
- 12. Обнаружение сегментов линии на изображении
- 13. Обнаружение кругового рисунка на изображении
- 14. обнаружение плеча на сегментированном изображении
- 15. Обнаружение прозрачности пикселей с помощью Imagick
- 16. изменение прозрачности/альфа/прозрачность в изображении png
- 17. iOS: обнаружение касания на изображении в UIImageView, содержащем несколько изображений
- 18. Обнаружение объекта для идентификации объекта на изображении
- 19. Обнаружение документа на отсканированном изображении OpenCV
- 20. Обнаружение черных пятен на изображении - Сегментация изображений
- 21. Обнаружение битов на пиксель в изображении TIFF
- 22. Обнаружение столкновений на повернутом изображении в javascript
- 23. Обнаружение капли на изображении с помощью OpenCV
- 24. Обнаружение наличия мелких деталей на изображении
- 25. Обнаружение и разбиение квадратных объектов на изображении
- 26. обнаружение линий и их положение на изображении
- 27. Обнаружение касания на изображении Текстура в OpenGl
- 28. Угловое обнаружение простой формы на изображении
- 29. Обнаружение объекта в двоичном изображении
- 30. Обнаружение присутствия объекта в изображении
Жаль, что СО становится все более назойливым человеком, которому нечего вносить, кроме пустых голосов, и закрывать запросы на законные вопросы. Спасибо @Sten за отличный ответ. – RunLoop