小编jsa*_*623的帖子

为什么内联if/else比Python中的.get()更快?

我之前正在审查一些代码,并且开发人员编写了内联if/ else而不是a get()来从列表中检索元素(如果它存在)(否则给它一个默认值).我决定timeit在repl 上弹出一些代码,结果很困惑.的if/ else需要1/3的时间get().

这是repl代码,下面是repl中的代码以及后代的结果:

import timeit

D = {"a": 1, "b": 2, "c": 3}

def ef(): return D['a'] if 'a' in D else 1

def gt(): return D.get('a', 1)

print "gt1", timeit.timeit(gt, number=10000)
print "ef1", timeit.timeit(ef, number=10000)
print "ef2", timeit.timeit(ef, number=10000)
print "gt2", timeit.timeit(gt, number=10000)
Run Code Online (Sandbox Code Playgroud)

结果:

gt1 0.0659999847412
ef1 0.0239999294281
ef2 0.0249998569489
gt2 0.0539999008179
Run Code Online (Sandbox Code Playgroud)

以及上述timeit调用的10次迭代的视觉,其中结果已经乘以10000以用于表示目的

10次​​迭代的视觉效果

python performance

14
推荐指数
1
解决办法
562
查看次数

使用Python在OpenCV中检测线条和形状

我一直在玩OpenCV(cv2)并检测线条和形状.说我的女儿画了一幅画,如下:

在此输入图像描述

我正在尝试编写一个Python脚本来分析绘图并将其转换为硬线/形状,如:

在此输入图像描述

话虽这么说,我已经安装了opencv并尝试使用它,但除了能够在图像中绘制一条垂直线之外没有运气.下面是我的代码到目前为止,任何关于如何使用opencv进行此操作的指针或建议将不胜感激.

import cv2
import numpy as np

class File(object):
    def __init__(self, filename):
        self.filename = filename

    def open(self, filename=None, mode='r'):
        if filename is None:
            filename = self.filename

        return cv2.imread(filename), open(filename, mode)

    def save(self, image=None, filename_override=None):
        filename = "output/" + self.filename.split('/')[-1]

        if filename_override:
            filename = "output/" + filename_override

        return cv2.imwrite(filename, image)

class Image(object):
    def __init__(self, image):
        self.image = image

    def grayscale(self):
        return cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)

    def edges(self):
        return cv2.Canny(self.image, 0, 255)

    def lines(self):
        lines = cv2.HoughLinesP(self.image, 1, np.pi/2, 6, None, 50, …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing

12
推荐指数
1
解决办法
5874
查看次数

标签 统计

python ×2

image-processing ×1

opencv ×1

performance ×1