osg结合opencv显示图像

osg编译的时候,似乎只要没有勾png,就无法读取png图像么?

所以就只好用opencv先读进来,然后传给osg。代码如下:

#include<osgViewer/Viewer> 
#include<osgDB/ReadFile>
#include<osgDB/WriteFile>
#include<osg/Geode>
#include<iostream>
#include<osg/DrawPixels>
#include<osg/Texture2D>
#include"FunctionHead.h"
#include"OSGInclude.h"

//opencv
//利用opencv读取图像
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>

osg::ref_ptr<osg::Image> CVMat_2_OSGImage(cv::Mat& cvimg)
{
    osg::Image osgframe2();
    osg::Image* osgframe = new osg::Image();
    osgframe->setImage(cvimg.cols, cvimg.rows, 3,
        GL_BGR, GL_BGR, GL_UNSIGNED_BYTE, cvimg.data,
        osg::Image::NO_DELETE, 1);
    return osgframe;
}

int NinOsg_DrawPicture()
{
    osg::ref_ptr<osg::DrawPixels> bitmap1 = new osg::DrawPixels;
    osg::ref_ptr<osg::DrawPixels> bitmap2 = new osg::DrawPixels;
    osg::ref_ptr<osg::DrawPixels> bitmap3 = new osg::DrawPixels;
    bitmap1->setPosition(osg::Vec3(0.0, 0.0, 0.0));
    bitmap2->setPosition(osg::Vec3(80.0, 0.0, 0.0));
    bitmap3->setPosition(osg::Vec3(200.0, 0.0, 0.0));
    //bitmap3->setUseSubImage(true);
    //bitmap1->setImage(osgDB::readImageFile("..\\OpenSceneGraph-Data\\Images\\osg64.png"));
    cv::Mat cvMat1 = cv::imread("..\\OpenSceneGraph-Data\\Images\\osg64.png");
    cv::Mat cvMat2 = cv::imread("..\\OpenSceneGraph-Data\\Images\\osg128.png");
    cv::Mat cvMat3 = cv::imread("..\\OpenSceneGraph-Data\\66.png");
    osg::ref_ptr<osg::Image> image = CVMat_2_OSGImage(cvMat1);
    osg::ref_ptr<osg::Image> image2 = CVMat_2_OSGImage(cvMat2);
    osg::ref_ptr<osg::Image> image3 = CVMat_2_OSGImage(cvMat3);
    osgDB::writeImageFile(*image3, "osgframe.bmp");//写文件

    bitmap1->setImage(image);
    bitmap2->setImage(image2);
    bitmap3->setImage(image3);
    osg::ref_ptr<osg::Geode> geode = new osg::Geode();

    //geode->addDrawable(bitmap1.get());
    //geode->addDrawable(bitmap2.get());
    geode->addDrawable(bitmap3.get());
    
    osgViewer::Viewer viewer;
    viewer.setSceneData(geode.get());
    return viewer.run();
}

似乎是显示出来了,首先放效果。效果如下:

问题:1。当加载多张图片的时候,就会报错,似乎是内存访问错误

问题:2。显示的图片是反过来的,应该是opencv和opengl默认的图片原点位置不同导致的。

目前,内存报错还不知道是由什么引起的。继续学习。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值