我正在使用以下代码进行图像处理相关研究。该代码可以很好地用作功能,但是太慢了,一步最多要花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 );
有人在实现目标方面有更快的结果吗?
答案 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星空图像的样子:
您可以拖动滑块以更改coeff
。拖动后,处理后的图像立即更新。您可以缩放和平移处理过的图像,以查看详细信息并调整coeff
。
基础图像处理库是libvips,它具有Python绑定pyvips。在pyvips中,您的程序将是:
import pyvips
def adjust(image, coeff):
return image * [1, coeff / 100, 1 - coeff / 100]
当然,这没有GUI元素。