Hi
You can do
osgImage->setImage(cvImg->width,cvImg->height, 3,
GL_RGB, GL_RGB, GL_UNSIGNED_BYTE,
(BYTE*)(cvImg->imageData),
osg::Image::AllocationMode::NO_DELETE,1);
GL_RGB, GL_RGB, GL_UNSIGNED_BYTE,
(BYTE*)(cvImg->imageData),
osg::Image::AllocationMode::NO_DELETE,1);
every time new image comes from opencv, and you should be ok
Cheers.
04.06.2012, 09:52, "Praveena Sarathchandra" <[email protected]>:
Hi,So far I've been successful in showing the first captured frame using OpenCV, in OSG.// IplImage* cvImg is the webcam output image captured using cvQueryFrame(capture)
osg::ref_ptr<osg::Image> osgImage = new osg::Image;
osgImage->setImage(cvImg->width,cvImg->height, 3,
GL_RGB, GL_RGB, GL_UNSIGNED_BYTE,
(BYTE*)(cvImg->imageData),
osg::Image::AllocationMode::NO_DELETE,1);osg::ImageStream* imageStream = dynamic_cast<osg::ImageStream*>( osgImage.get() );
if( imageStream ) imageStream->play();osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
texture->setImage( osgImage.get() );osg::ref_ptr<osg::Drawable> quad = osg::createTexturedQuadGeometry(
osg::Vec3(), osg::Vec3(1.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 1.0f) );
quad->getOrCreateStateSet()->setTextureAttributeAndModes(0,texture.get() );osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable( quad.get() );But I want the entire webcam stream in OSG, after preprocessing in OpenCV. After googling I found this answer as a guide:According to that I made my Camera class inherit from osg::ImageStream and called dirty() whenever a new frame is captured. But when I run the program it crashes! How can I get this to work?class Camera : public QObject, public osg::ImageStream
{
Q_OBJECT
public:
Camera();
~Camera();
IplImage* getFrame();
private:
CvCapture* capture;
IplImage* frame;
int timerId;
public slots:
void timerEvent(QTimerEvent *);
private slots:
void initialize();
};Camera::Camera() : QObject(), osg::ImageStream()
{
capture = cvCreateCameraCapture(0);
frame = cvQueryFrame(capture);
QTimer::singleShot(0,this,SLOT(initialize()));
}
void Camera::initialize(){
frame = cvQueryFrame(capture);
timerId = startTimer(10);
}
void Camera::timerEvent(QTimerEvent *){
frame = cvQueryFrame(capture);
dirty();
}Thanks_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

