2016-04-15 3 views
1

Я читаю изображение и выполняю обработку на синем канале без изменения красного или зеленого каналов.OpenCV: imwrite изменяет значения пикселей каналов при сохранении

Когда я закончил обработку синего канала, я объединил три канала в одно изображение RGB. и когда я использую imshow для просмотра каналов, все в порядке, и я вижу, что изменения, которые я сделал, влияют только на синий канал, и они не влияют на красный или зеленый.

До этого момента каждая вещь в порядке!

Но когда я сохраняю изображение с помощью imwrite, результирующее изображение немного отличается от того, что изменения, сделанные на синем канале, по-видимому, распространяются на красный и зеленый каналы, это похоже на то, что imwrite делает какое-то среднее между 3 канала:

image = imread('image.jpg', IMREAD_COLOR); 
split(image, channels); 
// Create some changes on channels[0] 

merge(channels, 3, image); 
// Up to this point every thing is alright 
imwrite("modified.jpg", image); // Image changes when written; 

Есть ли какие-либо решения, чтобы избежать такого поведения?

ответ

3

JPG является формат с потерями: https://en.wikipedia.org/wiki/JPEG

JPEG (/ dʒeɪpɛɡ/ДЖЕЙ-PEG) 1 является широко используемым методом сжатия с потерями для цифровых изображений, особенно для тех, изображений, полученных цифровой фотографии. Степень сжатия может быть скорректирована, , позволяющая выбирать компромисс между размером хранилища и качеством изображения. JPEG обычно достигает сжатия 10: 1 с небольшими ощутимыми потерями в качестве изображения.

Решение: Используйте формат потерь Формат PNG для сохранения изображения.

+0

Это первое, что я пробовал, но все-таки, это то же самое. –

+0

Я не думаю, что проблема заключается в сжатии с потерями. Я попытался сделать то же самое на Matlab, и когда я сохраню изображение, я могу видеть, что все изменения, которые я внес на одном канале, другие не затрагивают. Кроме того, я только что нашел этот пост, и я думаю, что это может быть связано: http://stackoverflow.com/questions/29815299/opencv-2-4-8-2-imshow-differs-from-imwrite?rq=1 На данный момент мне удалось сделать то, что я хотел, я попытаюсь изучить его позже. и опубликуйте правильный ответ, или, может быть, тем временем кто-то найдет его. Спасибо, человек! –

+0

Привет @AllaouaBenchikh, если вы пытались использовать PNG, почему вы не писали об этом в своем Вопросе? Всегда полезно, если вы покажете, что вы пробовали, задавая вопрос! Вы можете попытаться сохранить его как * bmp. Если это не работает, проверьте, правильно ли объединены каналы, чтобы мы могли найти ошибку. Как вам удалось сделать то, что вы хотите? Если это решение (даже если оно плохое) для вашей проблемы, пожалуйста, поделитесь им с нами, чтобы помочь будущим читателям. – Mailerdaimon

Смежные вопросы