Канал от 16u до 8u для отслеживания блобов OpenCV - PullRequest
2 голосов
/ 13 декабря 2010

Может кто-нибудь сказать, почему это не работает?

void CVBlobTrack::updateKinect(ImageSourceRef kdepth, ImageSourceRef kcolor) {
cv::Mat input;
cv::Mat output;

channel16 = Channel16u(kdepth);



// Conversion from 16 bit int to 8 bit int for blob track

//uint16_t *largeImage = (uint16_t *)channel16.getData();
//uint8_t *smallImage = (uint8_t *)channel8.getData();

for (int y = 0; y < 480; y++)
{
    for (int x = 0; x < 640; x++)
    {
        uint8_t c = floor(float(channel16.getValue(Vec2i(x,y))) / 65545.0f * 255.0f );                         

        // This needs to change as its slooooooooooow
        channel8.setValue(Vec2i(x,y), c);

    }
}


writeImage("test", channel8, "png");

cvSetData(mKinectDepthImage8, channel8.getData(), mKinectDepthImage8->widthStep);

Запись образа на диск работает нормально.Попытка использовать канал в качестве данных ИЛИ КАК CINDER GL_TEXTURE НЕ работает.Проще говоря, значения записываются в канал (я верю), и все же по какой-то причине, только 1 контур обнаруживается, когда я отслеживаю блоб, а текстура получается полностью черной.а также распечатка значений в отличие от преобразования в плавающее и многих других методов, и это всегда приводит к черной текстуре на экране и только 1 найденному контуру.

void CVBlobTrack::draw() {
if(channel8) {
    gl::Texture ttex = gl::Texture(channel8);
    glEnable(GL_TEXTURE_2D);
    ttex.bind();
    glBegin(GL_QUADS);
    gl::color(Color::white());

    glTexCoord2f(0.0f, 0.0f);
    glVertex3f(0.0f, 0.0f,0.0f);

    glTexCoord2f(1.0f, 0.0f);
    glVertex3f(640.0f, 0.0f,0.0f);

    glTexCoord2f(1.0f, 1.0f);
    glVertex3f(640.0f, 480.0f ,0.0f);

    glTexCoord2f(0.0f, 1.0f);
    glVertex3f(0.0f, 480.0f,0.0f);
    glEnd();

    ttex.unbind();
    glDisable(GL_TEXTURE_2D);
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...