程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了OpenCV Python通过图像数据绑定极其缓慢的迭代大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决OpenCV Python通过图像数据绑定极其缓慢的迭代?

开发过程中遇到OpenCV Python通过图像数据绑定极其缓慢的迭代的问题如何解决?下面主要结合日常开发的经验,给出你关于OpenCV Python通过图像数据绑定极其缓慢的迭代的解决方法建议,希望对你解决OpenCV Python通过图像数据绑定极其缓慢的迭代有所启发或帮助;

尝试使用Numpy进行计算,而不要使用嵌套循环。对于numpy这样的简单计算,您应该获得类似C的性能。

例如,您的嵌套for循环可以用几个numpy表达式代替…

我对opencv并不十分熟悉,但是我认为python绑定现在具有numpy数组接口,因此上面的示例应该很简单:

cv.PyrDown(img, dsimg)

data = np.asarray(dsimg)
blue, green, red = data.T

res = (green > (_RED_DIFF + red)) & (green > (_BLU_DIFF + bluE))
res = res.astype(np.uint8) * 255

res = cv.fromarray(res)

(当然,完全未经测试…)同样,我对opencv并不十分熟悉,但是无论如何,嵌套python for循环都不是明智地修改图像元素的方法。

希望无论如何能有所帮助!

解决方法

我最近使用了一些代码,该代码基于 OpenCV c ++中的 颜色跟踪对​​象,并将其重写为python绑定。

总体结果和方法显然是相同的减去语法。但是,当我在视频的每一帧上执行以下代码时,大约需要2-3秒才能完成,因为相比之下,同样是下面的c
++变体是即时的,并且我可以在手指按下时以最快的速度在帧之间进行迭代键。

有什么想法或意见吗?

    cv.PyrDown(img,dsimg)
    for i in range( 0,dsimg.height ):
        for j in range( 0,dsimg.width):

            if Dsimg[i,j][1] > ( _RED_DIFF + dsimg[i,j][2] ) and dsimg[i,j][1] > ( _BLU_DIFF + dsimg[i,j][0] ):
                res[i,j] = 255
            else:
                res[i,j] = 0

    for( int i =0; i < (height); i++ ) 
    {
        for( int j = 0; j < (width); j++ )
        {
            if( ( (data[i * step + j * chAnnels + 1]) > (RED_DIFF + data[i * step + j * chAnnels + 2]) ) &&
                ( (data[i * step + j * chAnnels + 1]) > (BLU_DIFF + data[i * step + j * chAnnels]) ) )
                data_r[i *step_r + j * chAnnels_r] = 255;
            else
                data_r[i * step_r + j * chAnnels_r] = 0;
        }
    }

谢谢

大佬总结

以上是大佬教程为你收集整理的OpenCV Python通过图像数据绑定极其缓慢的迭代全部内容,希望文章能够帮你解决OpenCV Python通过图像数据绑定极其缓慢的迭代所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。