2015-03-22 2 views
0

Я конвертирую свое изображение bgr в изображение rgb, а затем сохраняю его на диск, но сохраненное изображение не находится в формате rgb.opencv cvSaveImage() сохраняет изображение RGB jpg в формате BGR

IplImage* opencvImage_temp = cvCloneImage(inputImg); 
cvCvtColor(inputImg,opencvImage_temp, CV_BGR2RGB); 
opencvImage=cvCreateImage (cvSize(480,320), opencvImage_temp->depth, opencvImage_temp->nChannels); 
cvResize(opencvImage_temp, opencvImage); 
cvSaveImage("stream.jpg",opencvImage_temp); 

Пожалуйста, помогите мне, если кто-либо из вас столкнулся с этим вопросом раньше.

+0

, пожалуйста, переключитесь на C++ api opencv. (также все изображения * являются * bgr в opencv, а не rgb) – berak

+0

Да, я знаю, что я хочу сохранить изображение в формате RGB на диске. Вы знаете, как достичь этого. Спасибо за ответ –

+0

не с openCV. попробуйте некоторую специализированную библиотеку расширения. – Micka

ответ

0

Вы передумали проблему. Пусть 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.

+0

Спасибо за такое приятное объяснение, на самом деле я получал изображение из opencv и показывал это внутри окна gtk, вот почему я делал преобразование, и я решил сохранить преобразованное изображение на диск. –