yagami_md Ответов: 1

Библиотека Opencv, получить данные без заголовка ?


привет друзья
Я начинаю работать с opencv с помощью программирования на языке Си
- во-первых, я конвертирую изображение формата greyscale pgm в двоичный черно-белый
-я хочу получить только данные изображения без заголовка? без изменения свойств изображения
-если у opencv есть функция для этого, то это хорошо ;
но если у него этого нет, то я думаю использовать 2 буфера один для заголовка и 2 для данных после того, как я сохраню каждый из них для файла (файл из заголовка и один для данных)
но probem здесь после того, как я могу вернуться к исходному изображению (это означает, что когда у меня есть файл для данных и файл для данных, как я могу additionnel быть, я могу снова открыть изображение)
nota: код предназначен только для того, как я конвертирую изображение в формате оттенков серого в двоичный файл, который я буду после обновления читать на данных

Что я уже пробовал:

#include "stdafx.h"
#include <iostream>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <stdio.h>
#include</iostream>


int _tmain(int argc, _TCHAR* argv[])
{
	//load image
	IplImage* im_gray = cvLoadImage("lena512.pgm",CV_LOAD_IMAGE_GRAYSCALE);
	//convert to grey
		//convert to binary 
	IplImage* im_bw = cvCreateImage(cvGetSize(im_gray),IPL_DEPTH_8U,1);
	cvThreshold(im_gray, im_bw, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
	//save to disk
	cvSaveImage("image_bw.pbm",im_bw);

yagami_md

вы можете показать Заголовок изображения и данные здесь :
// show_pixel_image.cpp : определяет точку входа для консольного приложения.
//

код #include "файл stdafx.ч"
#include < stdio.h>
#include & lt;string>
#включить & lt;conio. h>


пустота Функ()
{
Файл * pFile=fopen ("image_bw.pbm", " rb");
int c;
//int a=0;
делать {
c = fgetc (pFile);
printf ("int -- %d \n", c);
//printf ("int -- %d", a);
//ля++;
} while (c != EOF);
//Е ("А ===%Д",а);
fclose(pFile);
}


инт имя _tmain(АГДС, функций _tchar* argv в[])
{
функция();
геч();


}

yagami_md

что мне нужно сделать для сохранения только заголовка и только данных с помощью этого программирования?
// image_to_buffer.cpp : определяет точку входа для консольного приложения.
//

код #include "файл stdafx.ч"
#include < stdio.h>
#include <stdlib.h>
#включить & lt;conio. h>



инт имя _tmain(АГДС, функций _tchar* argv в[])
{

Файл * pFile;
long lSize;
char * буфер;
реализация результатов;

pFile = fopen ("image_bw.pbm", " r+b" );
if (pFile==NULL) {fputs ("File error", stderr); exit (1);}
/*char c;
делать {
c = fgetc (pFile);
printf ("%c", c);
} while (c != EOF);*/

// получение размера файла:
fseek (pFile, 0, SEEK_END);
lSize = ftell (pFile);
перемотка назад (pFile);

// выделите память для хранения всего файла:
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) {fputs ("ошибка памяти", stderr); exit (2);}

// скопируйте файл в буфер:
результат = fread (buffer, 1,lSize,pFile);
if (result != lSize) {fputs ("ошибка чтения", stderr); exit (3);}

/* теперь весь файл загружается в буфер памяти. */

// прекратить
int i=0;


while (i < lSize)
{
printf ("%02X", (int)буфер[i]);
я++;
}

fclose (pFile);
свободный (буфер);
геч();
}

yagami_md

ответьте пожалуйста

1 Ответов

Рейтинг:
0

KarstenK

Если бы вы погуглили, то нашли бы эту полезную информацию о заголовки pgm. Это примерно говорит о том, что файлы pgm начинаются с идентификатора формата, известного как "магическое число" (P1-P7), который сообщает вам тип формата, а после него некоторые дополнительные детали, которые являются новой строкой или пробелом, разделенными пробелами.

Обычно разделение заголовка и данных не требуется. Если вы хотите преобразовать изображение, вам следует поискать какую-нибудь библиотеку.

Ссылка на какой-то код C# в этом Вопросы и ответы это может вдохновить вас на дальнейшие шаги.