Как преобразовать изображения JPEG в DCT 8x8 с использованием OpenCv и C++? Как я могу начать точно?Как конвертировать JPEG в DCT 8 x 8?
ответ
Я не думаю, что есть много смысла в том, чего вы пытаетесь достичь. Изображение JPEG уже заполнено DCT. Вы должны понимать, первое, что вы пытаетесь сделать, OpenCV + C++ только делает грязнее
Я пытаюсь использовать водяной знак изображения в формате JPEG. но для этого мне нужно преобразовать изображение в более мелкие блоки размером 8x8. И что вы подразумеваете под словом «изображение PEG уже заполнено DCT»? – stbb24
Я предлагаю вам сделать некоторые чтения - запись в формате wikipedia JPEG, вероятно, станет хорошей отправной точкой. – ZungBang
@ stbb24: JPEG внутренне использует DCT на блоках пикселей для сжатия данных изображения. Чтобы добавить водяной знак, я на 95% уверен, что вы не хотите иметь дело с этим. Используйте libjpeg (или любую другую альтернативную lib), распакуйте JPEG в обычный RGB (или YUV, если вам удобно с ним), примените водяной знак к изображению и сжимайте его. Если вы уверены, что хотите использовать только определенные блоки DCT, измените их и сохраните с помощью нанесенного водяного знака, вам потребуется более глубокое понимание libjpeg. Спросите в своем списке рассылки. Если такое возможно, я уверен, что вы получите быстрое решение. – Pavel
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, и посмотреть, как это делается там ,
Более полный пример, кажется, здесь: http://stackoverflow.com/a/4497493/27831 – ZungBang
что вы сделали до сих пор? – chikuba
Начните с чтения документации OpenCV – Pablo