【问题标题】:OpenCV getRectSubPix with Alpha Channel带有 Alpha 通道的 OpenCV getRectSubPix
【发布时间】:2012-08-21 04:18:05
【问题描述】:

我需要在我的代码中使用 getRectSubPix 函数作为裁剪图像旋转部分的过程的一部分。这通常适用于 3 通道图像,但是一旦我尝试将它与 BGRA 或 RGBA 垫图像一起使用,它就会崩溃告诉我

OpenCV 错误:cvGetRectSubPix,文件 /home/biotracking/Downloads/OpenCV-2.4.2/modules/imgproc/src/samplers.cpp,第 550 行中不支持的格式或格式组合 ()

我的代码基本上是这样的

                cv::cvtColor(polymask, polymask, CV_BGR2BGRA);
                getRectSubPix(polymask, cv::Size(sqrt(biggestdistancesquared)*2,sqrt(biggestdistancesquared)*2), src_center, polymask);

如果这个功能真的不适用于带有 alpha 通道的 Mats,那真是太疯狂了。有人知道吗?

【问题讨论】:

    标签: opencv alpha roi


    【解决方案1】:

    前段时间注意到这个问题和@blorgggg的回答,深感疑惑,因为这个问题和channels有关,而答案却和depth有关.


    我的回答: 错误上升是因为getRectSubPix 仅支持通道 1 或 3 的图像。

    相关代码:

    if( (cn != 1 && cn != 3) || !CV_ARE_CNS_EQ( src, dst ))
        CV_Error( CV_StsUnsupportedFormat, "" );
    

    @luhb 的here 线程中的说法是正确的,因为它确实只支持深度为 8 或 32 的图像是正确的,但与这里的问题无关。

    相关代码:

    if( CV_MAT_DEPTH( src->type ) != CV_8U || CV_MAT_DEPTH( dst->type ) != CV_32F )
                CV_Error( CV_StsUnsupportedFormat, "" );
    

    我检查了2.4/2.8/2.9版本的代码sn-p。


    最后,为了解决你的烦恼,你可以先在每个通道上拆分 Mat,getRectSuxPix,然后合并四个通道。

    【讨论】:

      【解决方案2】:

      另一个人回答了这个问题 在另一个问题中,用户 luhb 回答:Open CV using 16 bit signed format not working... Cropping and re-sizing an image

      似乎 getRectSubPix 只适用于 {src,dst} 类型的 {CV_8U, CV_8U}, {CV_32F, CV_32F} 和 {CV_8U, CV_32F}。

      我深入研究了源代码并弄清楚了这一点。 API 参考中没有规范。

      【讨论】:

        猜你喜欢
        • 2016-07-26
        • 1970-01-01
        • 2010-11-29
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-13
        • 2010-10-30
        相关资源
        最近更新 更多