Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2015, 14:16   #1
Mult1plexer
 
Регистрация: 22.04.2014
Сообщений: 6
По умолчанию указатели, ms vc++, opencv

имеется структура для работы с изображением:
Код:
typedef PRGBTriple *ptrPRGBTriple;

struct TBmpbuf // буфер для передачи изображения
{
	int width; // ширина изображения
	int height; // высота изображения
	BYTE tpixelFormat;
	int reserve; // зарезервировано
	ptrPRGBTriple pixels; // указатель на массивы rgb-значений пикселей
};

typedef struct PRGBTriple {
	BYTE rgbBlue;
	BYTE rgbtGreen;
	BYTE rgbtRed;
} PRGBTriple;
Передача изображения происходит через указатель:
Код:
TBmpbuf* rectify(TBmpbuf * img){}
Как обратится к конкретному элементу пикселя и получить его значение или как преобразовать такую структуру в opencv-шную структуру IplImage?
Mult1plexer вне форума Ответить с цитированием
Старый 29.09.2015, 14:35   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

A код откуда взялся? Может есть документация и уже готовые функции для работы с ним?
Стиль имен на Дельфи/Билдер похож.

Ну pixels это видимо просто одномерный массив, значит если нужно работать с 2D координатами, то их надо соответствующим образом преобразовывать туда/обратно с помощью несложных арифметических действий (используя width если значения идут в порядке как по строкам, или height если по столбцам).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 29.09.2015 в 14:38.
Alex11223 вне форума Ответить с цитированием
Старый 29.09.2015, 14:51   #3
Mult1plexer
 
Регистрация: 22.04.2014
Сообщений: 6
По умолчанию

Проект - стенд, который осуществляет последовательную обработку различных блоков, написан на builder C++. Блоки функционально разные и физически представляют собой динамические библиотеки. Я пиши блок ректификации на vc++ с opencv и необходимо преобразовать выше изложенную структуру в одну из структур opencv, желательно iplimage.
В моем случае pixels указатель к которому нужно обратиться через указатель на img.
Mult1plexer вне форума Ответить с цитированием
Старый 29.09.2015, 15:14   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

pixels[row * width + col];
waleri вне форума Ответить с цитированием
Старый 29.09.2015, 15:25   #5
Mult1plexer
 
Регистрация: 22.04.2014
Сообщений: 6
По умолчанию

пробую обратиться так:
Код:
TBmpbuf* __cdecl rectify(TBmpbuf* img, char* xmPtch, char* xyPtch)
{
	
	int height = 0, width = 0;
	
	height = img->height;
	width = img->width;

	IplImage * image = cvCreateImage(cvSize(width, height),IPL_DEPTH_8U,3);

	for(int i=0; i<img->height; i++)
	{
		 uchar *ptr = (uchar*) (image->imageData + i * image->widthStep);
		
                 PRGBTriple *pt =  (img->pixels + i);     //??
		
                 for (int j = 0; j < img->width; j++)
		 {  
			 ptr[3*j] = pt[j].rgbBlue;             //??
			 ptr[3*j+1] = pt[j].rgbtGreen;      //?? 
			 ptr[3*j+2] = pt[j].rgbtRed;         //??
	
		 }
	 }
}
на выходе ерунда получается
Mult1plexer вне форума Ответить с цитированием
Старый 29.09.2015, 15:28   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Второй цикл странный, pt это не массив.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.09.2015, 15:31   #7
Mult1plexer
 
Регистрация: 22.04.2014
Сообщений: 6
По умолчанию

pt это указатель на строку в моем понимание, с помощью индекса пытаюсь получить элемент этой строки
Mult1plexer вне форума Ответить с цитированием
Старый 29.09.2015, 15:36   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А, мне казалось там просто один пиксель (как следует из названия pixels).
Ну так вы уточните как именно они хранятся.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.09.2015, 15:58   #9
Mult1plexer
 
Регистрация: 22.04.2014
Сообщений: 6
По умолчанию

вопрос решен. исходные данные о структуре были не верны
Mult1plexer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenCV Taner Visual C++ 1 17.05.2014 18:01
OpenCV Редиска_Саша Помощь студентам 1 10.10.2011 22:52
Opencv scripto Общие вопросы C/C++ 0 17.02.2011 18:53
OpenCV marselik Общие вопросы C/C++ 0 23.04.2010 15:35
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39