ovis: add updateTexture function and allow grayscale texture format

pull/1714/head
Pavel Rojtberg 7 years ago
parent a83b78e29a
commit f7e522a1cb
  1. 9
      modules/ovis/include/opencv2/ovis.hpp
  2. 29
      modules/ovis/src/ovis.cpp

@ -281,6 +281,15 @@ CV_EXPORTS_W void createPointCloudMesh(const String& name, InputArray vertices,
* @param segments number of segments per side
*/
CV_EXPORTS_W void createGridMesh(const String& name, const Size2f& size, const Size& segments = Size(1, 1));
/**
* updates an existing texture
*
* A new texture can be created with @ref createPlaneMesh
* @param name name of the texture
* @param image the image data
*/
CV_EXPORTS_W void updateTexture(const String& name, InputArray image);
//! @}
}
}

@ -31,11 +31,28 @@ WindowScene::~WindowScene() {}
void _createTexture(const String& name, Mat image)
{
PixelFormat format;
switch(image.type())
{
case CV_8UC4:
format = PF_BYTE_BGRA;
break;
case CV_8UC3:
format = PF_BYTE_BGR;
break;
case CV_8UC1:
format = PF_BYTE_L;
break;
default:
CV_Error(Error::StsBadArg, "currently only CV_8UC1, CV_8UC3, CV_8UC4 textures are supported");
break;
}
TextureManager& texMgr = TextureManager::getSingleton();
TexturePtr tex = texMgr.getByName(name, RESOURCEGROUP_NAME);
Image im;
im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, PF_BYTE_BGR);
im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, format);
if (tex)
{
@ -323,7 +340,7 @@ public:
void setBackground(InputArray image)
{
CV_Assert(image.type() == CV_8UC3, bgplane);
CV_Assert(bgplane);
String name = sceneMgr->getName() + "_Background";
@ -770,5 +787,13 @@ void setMaterialProperty(const String& name, const String& prop, const Scalar& v
if(!set)
CV_Error_(Error::StsBadArg, ("shader parameter named '%s' not found", prop.c_str()));
}
void updateTexture(const String& name, InputArray image)
{
CV_Assert(_app);
TexturePtr tex = TextureManager::getSingleton().getByName(name, RESOURCEGROUP_NAME);
CV_Assert(tex);
_createTexture(name, image.getMat());
}
}
}

Loading…
Cancel
Save