png mat 转 osg
始:在项目中需要用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相关推荐
- osg节点函数功能汇总
1 virtual Object * cloneType () const 说明:只是返回一个和调用对象类型相同的同类型对象,仅此而已,调用对象的其它属性等不拷贝.如下代码: int main(int ...
- OSG 实现跟随节点的相机(转)
本章教程将继续使用回调和节点路径(NodePath)来检索节点的世界坐标. 本章目标: 在一个典型的仿真过程中,用户可能需要从场景中的各种车辆和人物里选择一个进行跟随.本章将介绍一种将摄像机" ...
- OSG局部坐标系和世界坐标系的理解
对坐标系这个概念相对比较熟悉,但是应用于实践时,发现理解有点偏差,现记录如下: 首先测试代码如下简单的使用了pick显示鼠标点击的位置以及利用computerinterections函数计算与鼠标相交 ...
- OSG开源教程(转)
整理:荣明.王伟 北 京 2008年4月 序 第一次接触OSG是在2001年,当时开源社区刚刚兴起,还没有现在这么火.下载了OSG源码,但是在看了几个Demo之后,感觉没有什么特别之处.时隔七年之后, ...
- osg 两个面求交线
面用osg::Matrix 来表示. osg::Vec3 ptOri = osg::(0,0,0) * mat;(面的原点) osg::Vec3 vecX = mat.getRotate() * o ...
- OsgEarth添加圆锥体
#pragma once #include <osg/Node> #include <osg/MatrixTransform> #include "Pendant.h ...
- 读OpenSceneGraph快速入门指导(Paul Martz著王锐钱学雷译)有感
这个的确时非常基础的入门书籍,而且讲的非常清楚.我来总结一下对我自己的知识备忘录. 你需要:OSG源码. OpenThreads(以获得多线程支持).第三方支持(libTIFF.libPNG等) 一些 ...
- osgEarth在斜面内绕自身Z轴旋转的锥体
添加斜面描述变量 为了指定斜面的倾斜角度,需要添加一些描述角度的变量,此处为了简化,只添加了俯仰角(及绕物体x轴旋转的角度).代码如下: double pitch = osg::PI * 30 / 1 ...
- cv::mat 颜色空间_网站设计基础:负空间
cv::mat 颜色空间 Let's start off by answering this question: What is negative space? It is the "emp ...
最新文章
- 运算加减乘除的c语言程序,求一个计算加减乘除的C语言程序
- android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案
- 限时领取!CSDN夏日惊喜礼包上线啦~
- RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)
- CODE[VS] 1979 第K个数
- java代码进行短信接收_自动化测试-自动获取手机短信验证码
- android逆向去广告,教程]安卓逆向去广告教程送给大家(
- 项目开发中常用的精华Python库介绍与整理
- Git恢复被删除的文件
- 经营微博的十个经典案例
- 浅谈选择示波器时的“5倍法则”
- 【开源】技术宅硬核跨年,DIY墨水屏日历:自动刷新位置、天气,随机播放2000多条「毒鸡汤」...
- Ubuntu18.04下 LOAM_Velodyne 的编译安装(PCL为1.8.1)
- Unity Shader UV动画之高光材质加上透明材质与UV动画
- 用老虎机小例子理解Multi-armed Bandit Learning
- ac3168无线网卡驱动下载_英特尔面向Windows 10推出无线网卡驱动程序和图形命令中心应用更新...
- 随访系统学习笔记之ModelBinder
- FileSaver+xlsx 表格下载为excel
- Acala 团队入选 UC Berkeley 2020 春季孵化加速器
- 首届中国网络文学论坛