Próbowałem wczytać pliki .png z przezroczystym kanałem (RGB i Alph) bez powodzenia. Wygląda na to, że openCV usuwa czwarty kanał z obrazu. Czy jest jakikolwiek sposób załadowania obrazu za pomocą kompletu 4 kanałów, w tym kanału alfa, nawet gdybym musiał zmodyfikować kod źródłowy OpenCV i odbudować goOpenCV: Jak ładować obrazy PNG 4 kanałami?
Odpowiedz
Wygląda na to, że OpenCV nadal nie obsługuje plików PNG z kanałem alfa.
Jest to hacks to bypass to.
Zgodnie z documentation, OpenCV obsługuje kanał alfa na PNG.
Wystarczy wywołać funkcję imread korzystając CV_LOAD_IMAGE_UNCHANGED jak flagi tak:
cvLoadImage("file.png", CV_LOAD_IMAGE_UNCHANGED)
Zgodnie z linkiem w tej odpowiedzi [Czytanie i pisanie obrazów i wideo] (http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html), po prostu wpisz liczbę ujemną jako flagę. Nie wspomniano o 'CV_LOAD_IMAGE_UNCHANGED', ale w rzeczywistości jest ono zdefiniowane w'/usr/include/opencv2/highgui/highgui_c.h' i działa na pakiecie OpenCV w systemie Ubuntu 14.04. –
Jeśli używasz OpenCV 2 lub OpenCV 3 należy użyć IMREAD_ * flagi (jak wspomniano w here).
C++
using namespace cv;
Mat image = imread("image.png", IMREAD_UNCHANGED);
Python
import cv2
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
Dziwne, że [czytanie i pisanie obrazów i wideo] (http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html) nie wspomina o nazwanych stałych. –
Prawdopodobnie dostałem to czytając kod źródłowy :) –
Prawo sposób odczytać przezroczysty PNG jest użycie 4th kanał jako kanał alfa. Najczęściej chce się mieć białe tło, jeśli tak jest, to poniżej można użyć kodu do komponowania alfą.
def read_transparent_png(filename):
image_4channel = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
alpha_channel = image_4channel[:,:,3]
rgb_channels = image_4channel[:,:,:3]
# White Background Image
white_background_image = np.ones_like(rgb_channels, dtype=np.uint8) * 255
# Alpha factor
alpha_factor = alpha_channel[:,:,np.newaxis].astype(np.float32)/255.0
alpha_factor = np.concatenate((alpha_factor,alpha_factor,alpha_factor), axis=2)
# Transparent Image Rendered on White Background
base = rgb_channels.astype(np.float32) * alpha_factor
white = white_background_image.astype(np.float32) * (1 - alpha_factor)
final_image = base + white
return final_image.astype(np.uint8)
Szczegółowy blog na ten temat znajduje się tutaj here.
- 1. Jak ładować obraz zasobów png w Silverlight?
- 2. Laravel 4 Obrazy HTML
- 3. Wybierz wszystkie obrazy PNG
- 4. Jak ładować obrazy za pomocą operatora sieci?
- 5. Jak ładować obrazy tylko w widoku?
- 6. OpenCV 2.4 Jpeg do PNG z kanałem alfa
- 7. Jak automatycznie ładować "biblioteki" w laravel 4?
- 8. 4-punktowe obrazy transformacji
- 9. Wyrównaj dwa obrazy w OpenCV
- 10. Czy QWebView może ładować obrazy z plików zasobów Qt?
- 11. Android webview loadDataWithBaseURL jak ładować obrazy z zasobów?
- 12. Czy obrazy png są zgodne z przeglądarkami?
- 13. Imwrite OpenCV zwiększa rozmiar obrazu png
- 14. OpenCV - imread(), imwrite() zwiększa rozmiar png?
- 15. Jak mogę nakładać obrazy (png) na stronie internetowej?
- 16. Duży rozmiar aplikacji ze względu na obrazy. Jak kompresować obrazy .PNG?
- 17. Jak połączyć dwa obrazy bez utraty intensywności w opencv
- 18. golang używając timeoutów z kanałami
- 19. pobrane obrazy png z przezroczystym tłem pokazuje z czarnym tłem
- 20. Używanie PushSharp z wieloma kanałami jabłek
- 21. Dlaczego pakiet zasobów kopiuje pliki .png jako obrazy .tiff?
- 22. Jak dynamicznie ładować zasobę R.styleable?
- 23. HTML/CSS: jak zrobić efekt winiety? 4 obrazy? CSS3 Gradient?
- 24. Jak ładować pliki w Mac 10.6?
- 25. Jak programowo edytować .png?
- 26. Golang jak łączyć/dołączać obrazy do siebie
- 27. Skaluj obrazy w formacie HTML5 bez rozmycia
- 28. Jak ładować saldo ruchu TCP?
- 29. Jak ładować wiadomości w RabbitMQ
- 30. Jak ładować Ajax w Wordpressie
@karlphilip: to już nie jest prawda. Może usuń/edytuj swoją odpowiedź. Zobacz na przykład tutaj: https://stackoverflow.com/questions/23562207/image-change-the-shape-when-displaying#23562497 –