0

私がやろうとしているのは、ハフ変換を使用して画像上の線を見つけ、その線を画像に描画することです。

しかし、次のようなエラーが表示されます。

Traceback (most recent call last): 
    File "houghLines.py", line 31, in <module>
    main() File "houghLines.py", line 13, in main 
    a = hough(image)
    File "houghLines.py", line 29, in hough
    (0,0,255))
    TypeError: only length-1 arrays can be converted to Python scalars

これは私のコードです:

import cv2
import os
import math
def main():

    directory = os.path.dirname(__file__)
    picLoc = os.path.join(directory, "../video-image/1m50s.png")

    image = cv2.imread(picLoc)
    print "sending image to houghLines.py"

    a = hough(image)
    cv2.imshow("", a)
    cv2.waitKey(0)
    cv2.destroyAllChildren()

def hough(image):
    canny = cv2.Canny(image, 50, 200)
    color_image = cv2.cvtColor(canny, cv2.COLOR_GRAY2BGR)
    houghLines = cv2.HoughLinesP(canny, 1, math.pi/180, 50)
    for x in range(len(houghLines)):
        print x
        pt1 = (houghLines[x][0], houghLines[x][1])
        pt2 = (houghLines[x][2], houghLines[x][3])
        cv2.line(color_image, pt1, pt2, (0,0,255), 3)
    return color_image

main()
4

1 に答える 1

1

この問題が発生するのは、 およびが、 および座標ごとに 1 つの要素のみで構成されるタプルであるとcv2.line()想定するためです。あなたの例では、そうではないことがすぐにわかります。pt1pt2xyprint pt1

cv2.HoughLinesP()要素が 1 つだけの numpy 配列を返します。この要素には、線の始点と終点である 4 つの点のリストが含まれています。これを知っていると、正しい実装は次のようになります。

    for line in houghLines[0]:
        pt1 = tuple(line[:2])
        print pt1
        pt2 = tuple(line[-2:])
        cv2.line(color_image, pt1, pt2, (0,0,255), 3)
于 2013-07-10T16:38:22.677 に答える