我如何提高速度

时间:2019-10-15 12:42:32

标签: python image-processing

我正在使用以下代码进行图像处理相关研究。该代码可以很好地用作功能,但是太慢了,一步最多要花10秒。

我需要更快的处理速度才能达到目标。

function prefix_wc_rest_prepare_order_object( $response, $object, $request ) {
    // Get the value
    $bacs_info = get_option( 'woocommerce_bacs_accounts');

    $response->data['bacs_info'] = $bacs_info;

    return $response;
}
add_filter( 'woocommerce_rest_prepare_shop_order_object', 'prefix_wc_rest_prepare_order_object', 10, 3 );

有人在实现目标方面有更快的结果吗?

2 个答案:

答案 0 :(得分:0)

对我来说,尚不清楚哪个对象temp_img到底是什么,但是如果它的行为类似于numpy数组,则可以用

替换循环
temp_img[:,:,0] = temp_img[:,:,1]*(coef/100)
temp_img[:,:,1] = temp_img[:,:,2]*(1-coef/1000)

,如果您的数组很大,则应该大大提高速度。在数组上对此类操作的实现进行了很好的优化,而python循环通常相当慢。

根据评论进行编辑: 由于您正在处理大图像,并且需要执行一些昂贵的操作,这些操作需要未缩放的版本,但只需要执行一次,因此您的代码可以得到以下类型的结构

import... #do all your imports

def expensive_operations(image, *args, **kwargs):
    #do all your expensive operations like object detection

def scale_image(image, scale):
    #create a scaled version of image

def cheap_operations(scaled_image, windowName):
    #perform cheap operations, e.g.
    coef = cv2.getTrackbarPos("coef", windowName)
    temp_img = np.copy(scaled_image)
    temp_img[:,:,1] = temp_img[:,:,1]* (coef / 100)
    temp_img[:,:,2] = temp_img[:,:,2] * (1 - (coef / 100))
    cv2.imshow(windowName, temp_img)



input = cv2.imread(path)
windowName = "Image"

cv2.namedWindow(windowName)
cv2.createTrackbar("coef", windowName, 0, 25000, nothing)

condition = True

expensive_results = expensive_operations(input) #possibly with some more args and keyword args
scaled_image = scale_image(input)

while condition:
    cheap_operations(scaled_image, windowName)
    if cv2.waitKey(30) >= 0:
        condition = False

cv2.destroyAllWindows()

答案 1 :(得分:0)

我在nip2中做了这种事情。这是一个图像处理电子表格,可以快速处理大图像。在60fps的任何大小的图像上执行这种操作都没有问题。

我为您提供了一个示例工作区:http://www.rollthepotato.net/~john/coeff.ws

这是处理1gb星空图像的样子:

enter image description here

您可以拖动滑块以更改coeff。拖动后,处理后的图像立即更新。您可以缩放和平移处理过的图像,以查看详细信息并调整coeff

基础图像处理库是libvips,它具有Python绑定pyvips。在pyvips中,您的程序将是:

import pyvips

def adjust(image, coeff):
    return image * [1, coeff / 100, 1 - coeff / 100]

当然,这没有GUI元素。