Итак, я понимаю, что могу многого требовать от незавершенной версии opencv, но у меня возникают странные проблемы с методом cvtColor, и я не могу найти никаких других ссылок на людей, имеющих в другом месте. Во-первых, в качестве предисловия я пишу многопоточное приложение с графическим интерфейсом, используя PyQt4, QThreads, Python 2.7 и opencv на beaglebone black. Мой текущий исходный код можно найти на github ЗДЕСЬ. Первоначально я использовал версию opencv для debian repo, но она оказалась настолько устаревшей, что в ней не было некоторых функций, которые я искал, а именно класса simpleblobdetector, и она была очень медленной. Имея это в виду, я скомпилировал последнюю версию opencv 3.0.0 с нуля, и с тех пор она ведет себя странно. В конце концов я сузил его до проблемы с cvtColor. Затем я упростил его до минимума кода, чтобы убедиться, что проблема не в чем-то другом. Вот что у меня есть, что я использовал для тестирования.
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)
Полученные изображения из этого кода можно найти ЗДЕСЬ.
Излишне говорить, что я в тупике в этот момент. Я нахожу особенно странным, что преобразование в серый работает идеально, а два других не работают вообще. У меня была пара моих друзей, которые работают с opencv, проверили как мой исходный код, так и этот тестовый код, и не увидели в нем ничего плохого. Кроме того, хотя и не в рамках этого тестового кода, я пытался читать файлы разных форматов и изображения из разных источников. Он также делает то же самое, манипулируя фреймом opencv, полученным от класса VideoCapture, где я впервые увидел проблему и что я в конечном итоге пытаюсь сделать.
Так кто-нибудь был свидетелем чего-то подобного раньше в opencv 3.0? Мне лучше просто компилировать opencv 2.4 и использовать его вместо этого? Я бы сделал это в первую очередь, но я следовал руководствам по пользовательской компиляции opencv, в частности, для beaglebone black, и все они использовали последнюю версию 3.0, поэтому я решил, что все будет хорошо. В любом случае, я подумал, что стоит проверить, прежде чем я снова займусь процессом компиляции, поскольку, как правило, мне требуется пара дней, чтобы сделать это правильно, делая это за одну ночь.
РЕДАКТИРОВАТЬ: На всякий случай, если кто-то еще пойдет искать и захочет узнать, что я узнал. Это определенно ошибка в кандидате на выпуск opencv 3.0, который я скачал. Мне не удалось найти исправление для этой версии, и в конечном итоге мне пришлось перейти на версию 2.4.10. После понижения все работает нормально.