Jump to content
Compvision.ru
Sign in to follow this  
Vicul

cvCloneImage()

Recommended Posts

Всем привет,

похоже я сегодня засиделся, что клинит меня на самом простом.

Есть 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. Сил уже нет разбираться, где хомутнул.

Share this post


Link to post
Share on other sites
Всем привет,

похоже я сегодня засиделся, что клинит меня на самом простом.

Есть 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 у нового изображения уже другой будет.

Share this post


Link to post
Share on other sites
по моему, указатель на данные мимо показывает (из-за смещения):

<!--shcode-->

result->imageData = img->imageData + 

point[0].y * img->widthStep +

point[0].x * img->nChannels;

<!--ehcode-->

Если бы неправильно, то хейдер неправильно бы показывал обрезанную картинку. Я проверял это перед тем как сделать клон.

Share this post


Link to post
Share on other sites
Если бы неправильно, то хейдер неправильно бы показывал обрезанную картинку. Я проверял это перед тем как сделать клон.

Да, поспешил. С этим все верно. Посмотрите WidthStep, все-таки, наверное он неправильный (будет меньше, т.к картинка обрезана).

Share this post


Link to post
Share on other sites
Да, поспешил. С этим все верно. Посмотрите 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 *

Share this post


Link to post
Share on other sites
Он одинаковый. Вот в дебаге данные на хейдер и клон.

Я имею ввиду что ошибка здесь, а не в клонировании:

result->widthStep = img->widthStep;

Share this post


Link to post
Share on other sites
Я имею ввиду что ошибка здесь, а не в клонировании:

result->widthStep = img->widthStep;

Ладно, завтра на свежую голову разберусь с этим.

Share this post


Link to post
Share on other sites
Ладно, завтра на свежую голову разберусь с этим.

Короче, чтобы не забивать себе голову этим шагом,сделал подругому

		resultRotation = cvCreateImage(cvGetSize(result), result->depth, 3);

cvCopyImage(result, resultRotation);

cvNamedWindow("Result", 0);

cvShowImage("Result", resultRotation);

Спасибо за помощь.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×