始:在项目中需要用opencv将视频流抠出需要的区域后进行实时显示到osg中,在测试过程中发现用mat保存后的png文件可以在osg中正常显示,内存数据则不行

过程:

1.抠图


bool CuseMat::makeContours(cv::Mat &mat, cv::Mat &matRoi, std::vector<std::vector<cv::Point>> contours)
{cv::Mat _matRoi = cv::Mat::zeros(mat.size(), CV_8UC1);;   cv::drawContours(_matRoi, contours, 0, cv::Scalar(255), -1);cv::Mat tmp;mat.copyTo(tmp, _matRoi);toPng(tmp, matRoi, 0);return true;
}void CuseMat::toPng(cv::Mat &src, cv::Mat &dst, int mark)
{cv::Mat cv_input = src.clone(); if (cv_input.channels() != 4){cv::cvtColor(cv_input, dst, CV_BGR2BGRA);}else{return;}for (int y = 0; y < dst.rows; ++y){for (int x = 0; x < dst.cols; ++x){cv::Vec4b & pixel = dst.at<cv::Vec4b>(y, x); if (pixel[0] == mark && pixel[1] == mark && pixel[2] == mark){pixel[3] = 0;}}}
}

2.osg显示图片

void setImageData(unsigned char* data, int cols, int rows, int internalFormat = GL_RGB8, int pixelFormat = GL_RGB)
{if (image){image->setImage(cols, rows, 1, internalFormat, pixelFormat, GL_UNSIGNED_BYTE, (BYTE*)data, osg::Image::NO_DELETE, 1);image->dirty();}
}

3.测试内存方式  --失败

 dt.umat.makeContours(dt.tmat, dt.roimat, { {{142,421}, {285,255},{432,380} } }); simpleVieoProject->setImageData(dt.roimat.data, dt.roimat.cols, dt.roimat.rows, GL_RGBA, GL_RGBA); 

4.测试文件方式 -- 成功


tempImage = osgDB::readImageFile(testImage);
setImageData(tempImage->data(), tempImage->s(), tempImage->t(), tempImage->getInternalTextureFormat(), tempImage->getPixelFormat());

5.查找资料

to osg -- jpg

https://blog.csdn.net/SJTU_dodoro/article/details/40111067

https://blog.csdn.net/qq_30547073/article/details/82823848

https://blog.csdn.net/qq_23191991/article/details/51036051

....

最终 参考  png  -----

https://blog.csdn.net/tajon1226/article/details/90605051

6.测试网上代码  -- 成功 --png

osg::ref_ptr<osg::Image> CVMat_2_OSGImage(cv::Mat& cvimg){unsigned char* data = cvimg.data;int width = cvimg.cols;int height = cvimg.rows;int bytesPerLine = static_cast<int>(cvimg.step);switch (cvimg.type()){case CV_8UC4:{osg::Image* osgframe = new osg::Image();osgframe->setImage(cvimg.cols, cvimg.rows, 1,GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, data, //GL_BGRA //cvimg.data  GL_RGBA8osg::Image::NO_DELETE, bytesPerLine);return osgframe; } default:{ return NULL;}} }tcvImg = cv::imread(testImage, cv::IMREAD_UNCHANGED);  tempImage =  CVMat_2_OSGImage(tcvImg);

结: mat的png的data数据排列方式与osg image data的png内部排列方式不同,所以osg展示mat的png数据存在问题

png mat 转 osg相关推荐

  1. osg节点函数功能汇总

    1 virtual Object * cloneType () const 说明:只是返回一个和调用对象类型相同的同类型对象,仅此而已,调用对象的其它属性等不拷贝.如下代码: int main(int ...

  2. OSG 实现跟随节点的相机(转)

    本章教程将继续使用回调和节点路径(NodePath)来检索节点的世界坐标. 本章目标: 在一个典型的仿真过程中,用户可能需要从场景中的各种车辆和人物里选择一个进行跟随.本章将介绍一种将摄像机" ...

  3. OSG局部坐标系和世界坐标系的理解

    对坐标系这个概念相对比较熟悉,但是应用于实践时,发现理解有点偏差,现记录如下: 首先测试代码如下简单的使用了pick显示鼠标点击的位置以及利用computerinterections函数计算与鼠标相交 ...

  4. OSG开源教程(转)

    整理:荣明.王伟 北 京 2008年4月 序 第一次接触OSG是在2001年,当时开源社区刚刚兴起,还没有现在这么火.下载了OSG源码,但是在看了几个Demo之后,感觉没有什么特别之处.时隔七年之后, ...

  5. osg 两个面求交线

    面用osg::Matrix  来表示. osg::Vec3 ptOri = osg::(0,0,0) * mat;(面的原点) osg::Vec3 vecX = mat.getRotate() * o ...

  6. OsgEarth添加圆锥体

    #pragma once #include <osg/Node> #include <osg/MatrixTransform> #include "Pendant.h ...

  7. 读OpenSceneGraph快速入门指导(Paul Martz著王锐钱学雷译)有感

    这个的确时非常基础的入门书籍,而且讲的非常清楚.我来总结一下对我自己的知识备忘录. 你需要:OSG源码. OpenThreads(以获得多线程支持).第三方支持(libTIFF.libPNG等) 一些 ...

  8. osgEarth在斜面内绕自身Z轴旋转的锥体

    添加斜面描述变量 为了指定斜面的倾斜角度,需要添加一些描述角度的变量,此处为了简化,只添加了俯仰角(及绕物体x轴旋转的角度).代码如下: double pitch = osg::PI * 30 / 1 ...

  9. cv::mat 颜色空间_网站设计基础:负空间

    cv::mat 颜色空间 Let's start off by answering this question: What is negative space? It is the "emp ...

最新文章

  1. 运算加减乘除的c语言程序,求一个计算加减乘除的C语言程序
  2. android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案
  3. 限时领取!CSDN夏日惊喜礼包上线啦~
  4. RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)
  5. CODE[VS] 1979 第K个数
  6. java代码进行短信接收_自动化测试-自动获取手机短信验证码
  7. android逆向去广告,教程]安卓逆向去广告教程送给大家(
  8. 项目开发中常用的精华Python库介绍与整理
  9. Git恢复被删除的文件
  10. 经营微博的十个经典案例
  11. 浅谈选择示波器时的“5倍法则”
  12. 【开源】技术宅硬核跨年,DIY墨水屏日历:自动刷新位置、天气,随机播放2000多条「毒鸡汤」...
  13. Ubuntu18.04下 LOAM_Velodyne 的编译安装(PCL为1.8.1)
  14. Unity Shader UV动画之高光材质加上透明材质与UV动画
  15. 用老虎机小例子理解Multi-armed Bandit Learning
  16. ac3168无线网卡驱动下载_英特尔面向Windows 10推出无线网卡驱动程序和图形命令中心应用更新...
  17. 随访系统学习笔记之ModelBinder
  18. FileSaver+xlsx 表格下载为excel
  19. Acala 团队入选 UC Berkeley 2020 春季孵化加速器
  20. 首届中国网络文学论坛

热门文章

  1. 基于金字塔的模板匹配算法(python)
  2. 迁移学习在乳腺癌检测中的应用
  3. Acrylate-PEG-NHS ester,丙烯酸酯-聚乙二醇-琥珀酰亚胺乙酸酯供应
  4. 想知道香港汇丰银行如何开户吗?
  5. python深度学习入门-与学习相关的技巧
  6. 正则表达式中 前瞻,后顾,负前瞻,负后顾等整理
  7. 把java项目打包成安装包
  8. 把java项目打包成安装包,在windows下安装
  9. 基于Java高校校园设备报修系统
  10. SQLite3数据库连接查询(c++篇)