Я получил черно-белое изображение из фильтра обнаружения края в GPUImage, где белый представляет края, а большая часть содержимого изображения черная, непрозрачная. Проблема в том, что я хочу наложить это изображение поверх другого изображения, чтобы показать, как края выравниваются с изображением ниже.Конвертировать черно-белое изображение в прозрачное и белое изображение в GPUImage? RGB -> Alpha в основном
Но область без края не прозрачна, а черна, поэтому в основном я хочу, чтобы черный был прозрачным или менял интенсивность черноты и белизны на интенсивность прозрачности.
Я не нашел прямой фильтр GPUImage для этой задачи преобразования. Очевидно, что GPUImageChromaKeyFilter - это способ сделать это, но это больше, чем преобразование канала RGB в Alpha, и не предназначено для этой задачи.
Более эффективным процессом может быть создание собственного подкласса GPUImageSobelEdgeDetectionFilter и предоставление настраиваемого шейдера фрагментов, который также улучшает альфа-канал в ответ на силу края. Для основного вам нужно просто скопировать шейдер фрагмента Sobel и заменить 'gl_FragColor = vec4 (vec3 (mag), 1.0);' с 'gl_FragColor = vec4 (mag);' Это удаляет дополнительную память и обработку второй фильтр регулировки цвета. Смешивание непрозрачности позаботится обо всем остальном. –
@BradLarson Просто проверено и работает. Спасибо за ваш комментарий и ваш потрясающий проект! –