2015-04-13 4 views
5

Also ich realisiere, dass ich viel aus einer nicht-fertigen Version von opencv fragen kann, aber ich habe seltsame Probleme mit der cvtColor-Methode, die ich kann keine anderen Hinweise auf Menschen finden, die woanders sind. Als erstes schreibe ich eine Multithread-GUI-Anwendung mit PyQt4, QThreads, Python 2.7 und opencv auf dem Beaglebone Black. Meine aktuelle Quelle finden Sie auf github HERE. Ich benutzte ursprünglich die Debian-Repo-Version von opencv, aber es stellte sich heraus, dass es so veraltet war, dass es einige der Features nicht hatte, die ich suchte, nämlich die simpleblobdetector-Klasse, und extrem langsam war. Vor diesem Hintergrund habe ich die neueste opencv 3.0.0 von Grund auf neu kompiliert und seitdem wirkt es komisch. Ich habe es schließlich auf ein Problem mit cvtColor beschränkt. Ich habe es dann auf den minimalen Code vereinfacht, um sicherzustellen, dass es nicht etwas anderes ist, das das Problem verursacht. Hier ist, was ich habe, dass ich zum Testen verwendet habe.Python 2.7 und Opencv 3.0.0 cvtColor funktioniert nicht für BGR/RGB Konvertierungen

import cv2 

img = cv2.imread('images/original_image.png', cv2.IMREAD_COLOR) 

rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
bgr_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2BGR) 

cv2.imwrite("images/after_convert_to_rgb.png", rgb_img) 
cv2.imwrite("images/after_convert_to_gray.png", gray_img) 
cv2.imwrite("images/after_convert_back_to_bgr.png", bgr_img) 

Die resultierenden Bilder von diesem Code kann HERE finden.

Unnötig zu sagen, ich bin an dieser Stelle ratlos. Ich finde es besonders komisch, dass die Umwandlung in Grau perfekt funktioniert, während die anderen beiden überhaupt nicht funktionieren. Ich habe ein paar meiner Freunde, die mit opencv arbeiten, sowohl meinen Originalcode als auch diesen Testcode überprüfen lassen und kann nichts falsch sehen. Außerdem habe ich, obwohl nicht Teil dieses Testcodes, versucht, verschiedene Dateiformate und Bilder aus verschiedenen Quellen zu lesen. Es macht auch die gleiche Sache, einen opencv Rahmen manipulierend, der von der VideoCapture Klasse empfangen wird, da dort ich das Problem zuerst sah und was ich schließlich versuche, zu tun.

Also hat jemand in opencv 3.0 so etwas erlebt? Bin ich besser dran, einfach opencv 2.4 zu kompilieren und stattdessen zu verwenden? Ich hätte das an erster Stelle gemacht, aber ich habe die Anleitungen zur benutzerdefinierten Kompilierung von opencv für das Beaglebone Black im Besonderen verfolgt, und alle verwendeten die neuesten 3.0, also dachte ich, es wäre in Ordnung. Wie auch immer, ich dachte mir, es wäre eine Überprüfung wert, bevor ich den Kompilierungsprozess erneut durchführe, da es mich dazu zwingt, ein paar Tage dafür zu benötigen, damit ich über Nacht damit zurecht komme.

EDIT: Nur für den Fall jemand anderen sucht und will wissen, was ich herausgefunden habe. Es ist definitiv ein Fehler im Veröffentlichungskandidaten von opencv 3.0, den ich heruntergeladen habe. Ich konnte keine Lösung für diese Version finden und musste schließlich auf Version 2.4.10 zurückstufen. Seit der Herabstufung läuft jetzt alles gut.

+1

Sieht aus wie ein Bug. Ich denke, es ist besser, einen Fehlerbericht an den OpenCV Issue Tracker zu senden: http://code.opencv.org – jet47

+0

Hat sich das als Fehler herausgestellt? – ypx

+0

Ja, es stellte sich heraus, dass es sich um einen Fehler handelte, auf den ich keine Antworten finden konnte. Daher habe ich 2.4.10 neu kompiliert und stattdessen verwendet. –

Antwort

2

Obwohl es keine „OpenCV-Lösung“ Sie könnten nur die Farbkanäle mit reinem Python als cv2-Interface neu ordnen wird mit numpy-Arrays für die Datenspeicherung:

rgb_img = bgr_img[:,:,::-1] #bgr --> rgb 
bgr_img = rgb_img[:,:,::-1] #bgr --> rgb 
Verwandte Themen