Может кто-нибудь сказать, почему это не работает?
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);
}
}