Vicul 0 Жалоба Опубликовано November 26, 2009 Всем привет, похоже я сегодня засиделся, что клинит меня на самом простом. Есть 3-х канальный имидж IplImage* img, я из него делаю имидж_хейдер IplImage* result = cvCreateImageHeader(cvSize(point[1].x - point[0].x, point[1].y - point[0].y), img->depth, img->nChannels); result->widthStep = img->widthStep; result->imageData = img->imageData + point[0].y * img->widthStep + point[0].x * img->nChannels; То что получил (result) прекрасно можно показать в окно. Теперь хочу с него сделать клон и показать в окне IplImage* resultRotation = cvCloneImage(result); resultRotation->origin = result->origin; cvShowImage("Result", resultRotation); Так вот, эта гадюка, на cvShowImage() вываливается в exception. Сил уже нет разбираться, где хомутнул. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 26, 2009 Всем привет, похоже я сегодня засиделся, что клинит меня на самом простом. Есть 3-х канальный имидж IplImage* img, я из него делаю имидж_хейдер IplImage* result = cvCreateImageHeader(cvSize(point[1].x - point[0].x, point[1].y - point[0].y), img->depth, img->nChannels); result->widthStep = img->widthStep; result->imageData = img->imageData + point[0].y * img->widthStep + point[0].x * img->nChannels; То что получил (result) прекрасно можно показать в окно. Теперь хочу с него сделать клон и показать в окне IplImage* resultRotation = cvCloneImage(result); resultRotation->origin = result->origin; cvShowImage("Result", resultRotation); Так вот, эта гадюка, на cvShowImage() вываливается в exception. Сил уже нет разбираться, где хомутнул. Так вроде WidthStep у нового изображения уже другой будет. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Vicul 0 Жалоба Опубликовано November 26, 2009 по моему, указатель на данные мимо показывает (из-за смещения): <!--shcode-->result->imageData = img->imageData + point[0].y * img->widthStep + point[0].x * img->nChannels;<!--ehcode--> Если бы неправильно, то хейдер неправильно бы показывал обрезанную картинку. Я проверял это перед тем как сделать клон. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 26, 2009 Если бы неправильно, то хейдер неправильно бы показывал обрезанную картинку. Я проверял это перед тем как сделать клон. Да, поспешил. С этим все верно. Посмотрите WidthStep, все-таки, наверное он неправильный (будет меньше, т.к картинка обрезана). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Vicul 0 Жалоба Опубликовано November 26, 2009 Да, поспешил. С этим все верно. Посмотрите WidthStep, все-таки, наверное он неправильный (будет меньше, т.к картинка обрезана). Он одинаковый. Вот в дебаге данные на хейдер и клон. - result 0x0158fcd0 {nSize=112 ID=0 nChannels=3 ...} _IplImage * nSize 112 int ID 0 int nChannels 3 int alphaChannel 0 int depth 8 int + colorModel 0x0158fce4 "RGB" char [4] + channelSeq 0x0158fce8 "BGR" char [4] dataOrder 0 int origin 0 int align 4 int width 352 int height 275 int + roi 0x00000000 {coi=??? xOffset=??? yOffset=??? ...} _IplROI * + maskROI 0x00000000 {nSize=??? ID=??? nChannels=??? ...} _IplImage * imageId 0x00000000 void * tileInfo 0x00000000 _IplTileInfo * imageSize 290400 int + imageData 0x042341a4 "SC7QA5SC6SC6QB2TE5XH8WD5VA2S@1G7*kbTё·©РФЙРЧРРЬЦИЩХЙЮЫКаЮ‹ ќBPL,2-84/SH@[K?[H;TC6SB5SC3QA1P@0TD4SD4TE5TE5TE5TE5UF6WH8ZK;[O=`UAbTA_Q>LA-JC/Ѓmё»«ЪгЦЪеЫТЮШСЬЩУЮЫбиечьыэяяэяязлмбежйопксфисфбкоЛХЬ‰’›;DM&/8CKRNUXOTUPTUMRQ>DC6=:3:78?<9><4978=;BGEINL7<-.'+,%)*%(,),1'*/,/4((.'%+317**0''-,)2"!*!""()'-**0#&+$ char * widthStep 3060 int + BorderMode 0x0158fd1c int [4] + BorderConst 0x0158fd2c int [4] + imageDataOrigin 0x00000000 <Bad Ptr> char * - resultRotation 0x0158fd90 {nSize=112 ID=0 nChannels=3 ...} _IplImage * nSize 112 int ID 0 int nChannels 3 int alphaChannel 0 int depth 8 int + colorModel 0x0158fda4 "RGB" char [4] + channelSeq 0x0158fda8 "BGR" char [4] dataOrder 0 int origin 0 int align 4 int width 352 int height 275 int + roi 0x00000000 {coi=??? xOffset=??? yOffset=??? ...} _IplROI * + maskROI 0x00000000 {nSize=??? ID=??? nChannels=??? ...} _IplImage * imageId 0x00000000 void * tileInfo 0x00000000 _IplTileInfo * imageSize 290400 int + imageData 0x03dc0070 "SC7QA5SC6SC6QB2TE5XH8WD5VA2S@1G7*kbTё·©РФЙРЧРРЬЦИЩХЙЮЫКаЮ‹ ќBPL,2-84/SH@[K?[H;TC6SB5SC3QA1P@0TD4SD4TE5TE5TE5TE5UF6WH8ZK;[O=`UAbTA_Q>LA-JC/Ѓmё»«ЪгЦЪеЫТЮШСЬЩУЮЫбиечьыэяяэяязлмбежйопксфисфбкоЛХЬ‰’›;DM&/8CKRNUXOTUPTUMRQ>DC6=:3:78?<9><4978=;BGEINL7<-.'+,%)*%(,),1'*/,/4((.'%+317**0''-,)2"!*!""()'-**0#&+$ char * widthStep 3060 int + BorderMode 0x0158fddc int [4] + BorderConst 0x0158fdec int [4] + imageDataOrigin 0x03dc0070 "SC7QA5SC6SC6QB2TE5XH8WD5VA2S@1G7*kbTё·©РФЙРЧРРЬЦИЩХЙЮЫКаЮ‹ ќBPL,2-84/SH@[K?[H;TC6SB5SC3QA1P@0TD4SD4TE5TE5TE5TE5UF6WH8ZK;[O=`UAbTA_Q>LA-JC/Ѓmё»«ЪгЦЪеЫТЮШСЬЩУЮЫбиечьыэяяэяязлмбежйопксфисфбкоЛХЬ‰’›;DM&/8CKRNUXOTUPTUMRQ>DC6=:3:78?<9><4978=;BGEINL7<-.'+,%)*%(,),1'*/,/4((.'%+317**0''-,)2"!*!""()'-**0#&+$ char * Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 26, 2009 Он одинаковый. Вот в дебаге данные на хейдер и клон. Я имею ввиду что ошибка здесь, а не в клонировании: result->widthStep = img->widthStep; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Vicul 0 Жалоба Опубликовано November 26, 2009 Я имею ввиду что ошибка здесь, а не в клонировании: result->widthStep = img->widthStep; Ладно, завтра на свежую голову разберусь с этим. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Vicul 0 Жалоба Опубликовано November 27, 2009 Ладно, завтра на свежую голову разберусь с этим. Короче, чтобы не забивать себе голову этим шагом,сделал подругому resultRotation = cvCreateImage(cvGetSize(result), result->depth, 3); cvCopyImage(result, resultRotation); cvNamedWindow("Result", 0); cvShowImage("Result", resultRotation); Спасибо за помощь. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах