Skip to content

Commit f7e522a

Browse files
committed
ovis: add updateTexture function and allow grayscale texture format
1 parent a83b78e commit f7e522a

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

modules/ovis/include/opencv2/ovis.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,15 @@ CV_EXPORTS_W void createPointCloudMesh(const String& name, InputArray vertices,
281281
* @param segments number of segments per side
282282
*/
283283
CV_EXPORTS_W void createGridMesh(const String& name, const Size2f& size, const Size& segments = Size(1, 1));
284+
285+
/**
286+
* updates an existing texture
287+
*
288+
* A new texture can be created with @ref createPlaneMesh
289+
* @param name name of the texture
290+
* @param image the image data
291+
*/
292+
CV_EXPORTS_W void updateTexture(const String& name, InputArray image);
284293
//! @}
285294
}
286295
}

modules/ovis/src/ovis.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,28 @@ WindowScene::~WindowScene() {}
3131

3232
void _createTexture(const String& name, Mat image)
3333
{
34+
PixelFormat format;
35+
switch(image.type())
36+
{
37+
case CV_8UC4:
38+
format = PF_BYTE_BGRA;
39+
break;
40+
case CV_8UC3:
41+
format = PF_BYTE_BGR;
42+
break;
43+
case CV_8UC1:
44+
format = PF_BYTE_L;
45+
break;
46+
default:
47+
CV_Error(Error::StsBadArg, "currently only CV_8UC1, CV_8UC3, CV_8UC4 textures are supported");
48+
break;
49+
}
50+
3451
TextureManager& texMgr = TextureManager::getSingleton();
3552
TexturePtr tex = texMgr.getByName(name, RESOURCEGROUP_NAME);
3653

3754
Image im;
38-
im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, PF_BYTE_BGR);
55+
im.loadDynamicImage(image.ptr(), image.cols, image.rows, 1, format);
3956

4057
if (tex)
4158
{
@@ -323,7 +340,7 @@ class WindowSceneImpl : public WindowScene
323340

324341
void setBackground(InputArray image)
325342
{
326-
CV_Assert(image.type() == CV_8UC3, bgplane);
343+
CV_Assert(bgplane);
327344

328345
String name = sceneMgr->getName() + "_Background";
329346

@@ -770,5 +787,13 @@ void setMaterialProperty(const String& name, const String& prop, const Scalar& v
770787
if(!set)
771788
CV_Error_(Error::StsBadArg, ("shader parameter named '%s' not found", prop.c_str()));
772789
}
790+
791+
void updateTexture(const String& name, InputArray image)
792+
{
793+
CV_Assert(_app);
794+
TexturePtr tex = TextureManager::getSingleton().getByName(name, RESOURCEGROUP_NAME);
795+
CV_Assert(tex);
796+
_createTexture(name, image.getMat());
797+
}
773798
}
774799
}

0 commit comments

Comments
 (0)