2012-04-18 6 views

ответ

0

Я не думаю, что есть много смысла в том, чего вы пытаетесь достичь. Изображение JPEG уже заполнено DCT. Вы должны понимать, первое, что вы пытаетесь сделать, OpenCV + C++ только делает грязнее

+0

Я пытаюсь использовать водяной знак изображения в формате JPEG. но для этого мне нужно преобразовать изображение в более мелкие блоки размером 8x8. И что вы подразумеваете под словом «изображение PEG уже заполнено DCT»? – stbb24

+0

Я предлагаю вам сделать некоторые чтения - запись в формате wikipedia JPEG, вероятно, станет хорошей отправной точкой. – ZungBang

+0

@ stbb24: JPEG внутренне использует DCT на блоках пикселей для сжатия данных изображения. Чтобы добавить водяной знак, я на 95% уверен, что вы не хотите иметь дело с этим. Используйте libjpeg (или любую другую альтернативную lib), распакуйте JPEG в обычный RGB (или YUV, если вам удобно с ним), примените водяной знак к изображению и сжимайте его. Если вы уверены, что хотите использовать только определенные блоки DCT, измените их и сохраните с помощью нанесенного водяного знака, вам потребуется более глубокое понимание libjpeg. Спросите в своем списке рассылки. Если такое возможно, я уверен, что вы получите быстрое решение. – Pavel

1

libjpeg твой друг ...

Следующий фрагмент кода загружает коэффициенты ДКП из изображения JPEG (отказ от ответственности: это потянули от более четырех лет проекта шахты - YMMV):

struct jpeg_decompress_struct srcinfo; 
struct jpeg_error_mgr jsrcerr; 
jvirt_barray_ptr * src_coef_arrays; 
FILE * fp; 

srcinfo.err = jpeg_std_error(&jsrcerr); 
jpeg_create_decompress(&srcinfo); 
fp = fopen(filename, "rb"); 
jpeg_stdio_src(&srcinfo, fp); 
(void) jpeg_read_header(&srcinfo, TRUE); 
src_coef_arrays = jpeg_read_coefficients(&srcinfo); 
fclose(fp); 

... 
// use coefficients 
... 

(void) jpeg_finish_decompress(&srcinfo); 
jpeg_destroy_decompress(&srcinfo); 

Доступ коэффициенты немного волосатые - я рекомендую вам проконсультироваться исходный код jpegtran утилиты, которая в комплекте с libjpeg, и посмотреть, как это делается там ,

+0

Более полный пример, кажется, здесь: http://stackoverflow.com/a/4497493/27831 – ZungBang