Вы передумали проблему. Пусть OpenCV позаботится о конверсии для вас. Попробуйте этот эксперимент (в C++!):
Mat blueImage(200,300, CV_8UC3, Scalar(255,0,0));
imshow("Blue Image", blueImage);
imwrite("blueOut.jpg", blueImage);
Mat blueSaved = imread("blueOut.jpg");
imshow("Saved Blue Image", blueSaved);
Mat redImage;
cvtColor(blueImage, redImage, CV_BGR2RGB);
imshow("Red Image", redImage);
imwrite("redOut.jpg", redImage);
Mat redSaved = imread("redOut.jpg");
imshow("Saved Red Image", redSaved);
Если посмотреть на первой линии, мы явно создавая все-синее изображение в формате BGR. Окно «Синее изображение» подтверждает это.
Когда мы сохраняем изображение BGR как jpeg, OpenCV автоматически преобразует это изображение BGR в RGB перед сохранением. Вы можете подтвердить это, перейдя в каталог, содержащий ваш исполняемый файл, и откройте «blueOut.jpg» с помощью любого программного обеспечения для просмотра изображений.
Теперь, если вы посмотрите на создание redImage
, все, что я делаю, это преобразование изображения BGR в RGB и просмотр его. Удивите, это красно! И даже когда мы его сохраняем, OpenCV покорно отменяет порядок каналов, а сохраненное изображение «redOut.jpg» красное.
Конечным результатом всего этого является то, что OpenCV работает для вас. Вам не нужно делать конверсии для вывода изображений RGB. О, и используйте C++ API.
, пожалуйста, переключитесь на C++ api opencv. (также все изображения * являются * bgr в opencv, а не rgb) – berak
Да, я знаю, что я хочу сохранить изображение в формате RGB на диске. Вы знаете, как достичь этого. Спасибо за ответ –
не с openCV. попробуйте некоторую специализированную библиотеку расширения. – Micka