当前位置:  开发笔记 > 编程语言 > 正文

如何将OpenCV IplImage转换为SDL_Surface?

如何解决《如何将OpenCVIplImage转换为SDL_Surface?》经验,为你挑选了1个好方法。

我正在尝试编写一个程序,它接受一个SDL_Surface,将其转换为一个IplImage,使用cvBlobsLib查找blob,将blob绘制为图像上的斑点,然后将输出转换IplImageSDL_Surface.

我差点儿完成了:只将IplImage背部转换为SDL_Surface尚未完成.该IplImage具有3个图像通道,每像素8位.我想我可以使用两个电话:

SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
SDL_Surface *SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);

我正在尝试SDL_CreateRGBsurfaceFrom.但是,我不知道音高,Rmask,Gmask和Bmask的正确值是什么.(Amask为0,因为没有alpha通道.)

有人可以通过解释如何做到这一点来帮助我吗?

谢谢!

编辑:例如,这是我尝试使用的代码:

SDL_Surface *ipl_to_surface (IplImage *opencvimg)
{
    int pitch = opencvimg->nChannels*opencvimg->width;
    printf("Depth %d, nChannels %d, pitch %d\n", opencvimg->depth,
                    opencvimg->nChannels, pitch);
    SDL_Surface *surface = SDL_CreateRGBSurfaceFrom((void*)opencvimg->imageData,
                    opencvimg->width,
                    opencvimg->height,
                    opencvimg->depth,
                    pitch,
                    0x0000ff, 0x00ff00, 0xff0000, 0
                    );
    return surface;
}

(SDL文档写道"Pitch是表面扫描线的大小,以字节为单位,即widthInPixels*bytesPerPixel.")这将输出"Depth 8,nChannels 3,pitch 1920"并显示一个完全红色的图像.我认为解决方案是将我的8位图像转换为24位(每通道1个字节),但我不知道该怎么做.有任何想法吗?



1> sgielen..:

好的,我搞定了!

我认为我对OpenCV深度为8表示像素每通道有8位这一事实感到困惑,因此在3通道图像中,像素有24位.因此,当将其转换为深度的SDL含义时,我们得到8 * 3 = 24位.

毕竟,图像是24位,SDL支持.因此,将图像转换为SDL非常简单:

SDL_Surface *surface = SDL_CreateRGBSurfaceFrom((void*)opencvimg->imageData,
                opencvimg->width,
                opencvimg->height,
                opencvimg->depth*opencvimg->nChannels,
                opencvimg->widthStep,
                0xff0000, 0x00ff00, 0x0000ff, 0
                );
return surface;

对不起,我希望这可以帮助任何人寻找相同的答案.

其他感兴趣的链接: http://www.libsdl.org/cgi/docwiki.cgi/Pixel_Access
以及完整的子程序: http://paster.dazjorz.com/?p=3714

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有