当前位置: 首页>>代码示例>>Python>>正文


Python cv2.HoughLines方法代码示例

本文整理汇总了Python中cv2.HoughLines方法的典型用法代码示例。如果您正苦于以下问题:Python cv2.HoughLines方法的具体用法?Python cv2.HoughLines怎么用?Python cv2.HoughLines使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在cv2的用法示例。


在下文中一共展示了cv2.HoughLines方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: detect_lines

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def detect_lines(self, canny_low_thresh, canny_high_thresh, canny_kernel_size,
                     hough_rho_res, hough_theta_res, hough_votes_thresh,
                     gray_conversion=cv2.COLOR_BGR2GRAY):
        """
        Detect lines in input image using hough transform.
        Return detected lines as list with tuples:
        (rho, theta, normalized theta with 0 <= theta_norm < np.pi, DIRECTION_VERTICAL or DIRECTION_HORIZONTAL)
        """
        
        self.gray_img = cv2.cvtColor(self.input_img, gray_conversion)
        self.edges = cv2.Canny(self.gray_img, canny_low_thresh, canny_high_thresh, apertureSize=canny_kernel_size)
        
        # detect lines with hough transform
        lines = cv2.HoughLines(self.edges, hough_rho_res, hough_theta_res, hough_votes_thresh)
        if lines is None:
            lines = []
        
        self.lines_hough = self._generate_hough_lines(lines)
        
        return self.lines_hough 
开发者ID:WZBSocialScienceCenter,项目名称:pdftabextract,代码行数:22,代码来源:imgproc.py

示例2: _generate_hough_lines

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def _generate_hough_lines(self, lines):
        """
        From a list of lines in <lines> detected by cv2.HoughLines, create a list with a tuple per line
        containing:
        (rho, theta, normalized theta with 0 <= theta_norm < np.pi, DIRECTION_VERTICAL or DIRECTION_HORIZONTAL)
        """
        lines_hough = []
        for l in lines:
            rho, theta = l[0]  # they come like this from OpenCV's hough transform
            theta_norm = normalize_angle(theta)
                
            if abs(PIHLF - theta_norm) > PI4TH:  # vertical
                line_dir = DIRECTION_VERTICAL
            else:
                line_dir = DIRECTION_HORIZONTAL
            
            lines_hough.append((rho, theta, theta_norm, line_dir))
        
        return lines_hough 
开发者ID:WZBSocialScienceCenter,项目名称:pdftabextract,代码行数:21,代码来源:imgproc.py

示例3: estimate_skew

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def estimate_skew(image):
    edges = auto_canny(image)
    lines = cv2.HoughLines(edges, 1, np.pi / 90, 200)
    new = edges.copy()

    thetas = []

    for line in lines:
        for rho, theta in line:
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a * rho
            y0 = b * rho
            x1 = int(x0 + 1000 * (-b))
            y1 = int(y0 + 1000 * (a))
            x2 = int(x0 - 1000 * (-b))
            y2 = int(y0 - 1000 * (a))
            if theta > np.pi / 3 and theta < np.pi * 2 / 3:
                thetas.append(theta)
                new = cv2.line(new, (x1, y1), (x2, y2), (255, 255, 255), 1)

    theta_mean = np.mean(thetas)
    theta = rad_to_deg(theta_mean) if len(thetas) > 0 else 0

    return theta 
开发者ID:jlsutherland,项目名称:doc2text,代码行数:27,代码来源:page.py

示例4: hough_line

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def hough_line(self):
        src = self.cv_read_img(self.src_file)
        if src is None:
            return

        gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
        edges = cv.Canny(gray, 50, 150, apertureSize=3)
        lines = cv.HoughLines(edges, 1, np.pi/180, 200)

        for line in lines:
            rho, theta = line[0]
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a * rho
            y0 = b * rho
            x1 = int(x0+1000*(-b))
            y1 = int(y0+1000*(a))
            x2 = int(x0-1000*(-b))
            y2 = int(y0-1000*(a))
            cv.line(src, (x1, y1), (x2, y2), (0, 0, 255), 2)

        self.decode_and_show_dst(src)


    # 圆检测 
开发者ID:itisyang,项目名称:ImageMiniLab,代码行数:27,代码来源:ImageMiniLab.py

示例5: _get_lines

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def _get_lines(image_segment, params):
    lines = []
    temp = cv2.HoughLines(image_segment.binarized_segmented_image, params.rho, params.theta, params.threshold)
    if temp is None:
        return lines

    rho_theta_pairs = [temp[idx][0] for idx in range(len(temp))]
    if len(rho_theta_pairs) > params.max_num:
        rho_theta_pairs = rho_theta_pairs[:params.max_num]


    nms_rho_theta_pairs = dimension_wise_non_maximum_suppression(rho_theta_pairs, (params.nms_rho, params.nms_theta),
                                                                 _dimension_wise_distances_between_rho_theta_pairs)

    for rho_theta_pair in rho_theta_pairs:
        curr_lines = _segment_line(image_segment, rho_theta_pair, params)
        lines.extend(curr_lines)

    return lines 
开发者ID:uwnlp,项目名称:geosolver,代码行数:21,代码来源:parse_primitives.py

示例6: crop_point_hough

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def crop_point_hough(crop_points):
    
    height = len(crop_points)
    width = len(crop_points[0])
    
    #crop_line_data = cv2.HoughLinesP(crop_points, 1, math.pi/180, 2, 10, 10)
    crop_line_data = cv2.HoughLines(crop_points, HOUGH_RHO, HOUGH_ANGLE, HOUGH_THRESH)
    
    crop_lines = np.zeros((height, width, 3), dtype=np.uint8)
    
    if crop_line_data != None:
        crop_line_data = crop_line_data[0]
        #print(crop_line_data)
        
        if len(crop_line_data[0]) == 2:
            for [rho, theta] in crop_line_data:
                #print(rho, theta)
                if (theta <= ANGLE_THRESH) or (theta >= math.pi-ANGLE_THRESH):
                    a = math.cos(theta)
                    b = math.sin(theta)
                    x0 = a*rho
                    y0 = b*rho
                    point1 = (int(round(x0+1000*(-b))), int(round(y0+1000*(a))))
                    point2 = (int(round(x0-1000*(-b))), int(round(y0-1000*(a))))
                    cv2.line(crop_lines, point1, point2, (0, 0, 255), 2)
                
        elif len(crop_line_data[0]) == 4:
            for [x0, y0, x1, y1] in crop_line_data:
                cv2.line(crop_lines, (x0, y0), (x1, y1), (0, 0, 255), 2)
    else:
        print("No lines found")
    
    return crop_lines 
开发者ID:petern3,项目名称:crop_row_detection,代码行数:35,代码来源:line_detect_1.py

示例7: main

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def main():
    capture = cv2.VideoCapture(0)

    while True:
        ret, frame = capture.read()

        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        edges_detec = cv2.Canny(gray_frame, 50, 250, apertureSize=5, L2gradient=True)

        hough_lines = cv2.HoughLines(edges_detec, 1, np.pi / 180, 200)

        if hough_lines is not None:
            for rho, theta in hough_lines[0]:
                x0 = rho * np.cos(theta)
                y0 = rho * np.sin(theta)

                ptsX = (int(x0 + 1000 * (-np.sin(theta))), int(y0 + 1000 * (np.cos(theta))))
                ptsY = (int(x0 - 1000 * (-np.sin(theta))), int(y0 - 1000 * (np.cos(theta))))
                cv2.line(frame, ptsX, ptsY, (0, 255, 0), 2)

        cv2.imshow("Capture Frame", frame)

        if cv2.waitKey(1) == 27:
            break

    cv2.destroyAllWindows()
    capture.release() 
开发者ID:amarlearning,项目名称:Finger-Detection-and-Tracking,代码行数:30,代码来源:HoughLine.py

示例8: hough_transform

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def hough_transform(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # Convert image to grayscale
    kernel = np.ones((15, 15), np.uint8)

    opening = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel)  # Open (erode, then dilate)
    edges = cv2.Canny(opening, 50, 150, apertureSize=3)  # Canny edge detection
    lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)  # Hough line detection

    hough_lines = []
    # Lines are represented by rho, theta; converted to endpoint notation
    if lines is not None:
        for line in lines:
            hough_lines.extend(list(starmap(endpoints, line)))

    return hough_lines 
开发者ID:SZanlongo,项目名称:vanishing-point-detection,代码行数:17,代码来源:vanishing_point.py

示例9: extractGrid

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def extractGrid(img,
                nvertical,
                nhorizontal,
                threshold1 = 50,
                threshold2 = 150,
                apertureSize = 3,
                hough_threshold_step=20,
                hough_threshold_min=50,
                hough_threshold_max=150):
    """Finds the grid lines in a board image.
    :param img: board image
    :param nvertical: number of vertical lines
    :param nhorizontal: number of horizontal lines
    :returns: a pair (horizontal, vertical). Both elements are lists with the lines' positions.
    """


    w, h, _ = img.shape
    close_threshold_v = (w / nvertical) / 4
    close_threshold_h = (h / nhorizontal) / 4


    im_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    thresh, im_bw = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    im_canny = cv2.Canny(im_bw, threshold1, threshold2, apertureSize=apertureSize)

    for i in range((hough_threshold_max - hough_threshold_min + 1) / hough_threshold_step):
        lines = cv2.HoughLines(im_canny, 1, np.pi / 180, hough_threshold_max - (hough_threshold_step * i))
        if lines is None:
            continue

        lines = [Line(l[0], l[1]) for l in lines[0]]
        horizontal, vertical = partitionLines(lines)
        vertical = filterCloseLines(vertical, horizontal=False, threshold=close_threshold_v)
        horizontal = filterCloseLines(horizontal, horizontal=True, threshold=close_threshold_h)

        if len(vertical) >= nvertical and \
           len(horizontal) >= nhorizontal:
            return (horizontal, vertical) 
开发者ID:nebbles,项目名称:DE3-ROB1-CHESS,代码行数:41,代码来源:extract.py

示例10: get_horizontal_lines

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def get_horizontal_lines (img):

	#=====[ Step 1: set parameters ]=====
	num_peaks = 5
	theta_buckets_horz = [-90, -89]
	theta_resolution_horz = 0.0175 #raidans
	rho_resolution_horz = 6
	threshold_horz = 5

	#=====[ Step 2: find lines in (rho, theta)	]=====
	# [H, theta, rho] = hough (corners_img, 'Theta', theta_buckets_horz, 'RhoResolution', rho_resolution_horz);
	# peaks = houghpeaks(H, num_peaks);
	lines_rt = cv2.HoughLines (deepcopy(img), rho_resolution_horz, theta_resolution_horz, threshold_horz)[0]
	print lines_rt
	#####[ DEBUG: draw lines in (rho, theta)	]#####
	img = draw_lines_rho_theta (img , lines_rt)
	cv2.imshow ('HORIZONTAL LINES', img)
	key = 0
	while key != 27:
		key = cv2.waitKey (30)

	#=====[ Step 3: convert peaks to rho, theta	]=====
	# theta_rad = fromDegrees ('radians', theta);
	# rhos = rho(peaks(:, 1));
	# thetas = theta_rad(peaks(:, 2));
	# lines = [rhos; thetas];

	#=====[ Step 4: figure out which lines they are	]=====
	# indexed_lines = horizontal_ransac (lines);

	#####[ DEBUG: show lines	]#####
	# draw_lines (corners_img, indexed_lines(1:2, :)); 
开发者ID:nebbles,项目名称:DE3-ROB1-CHESS,代码行数:34,代码来源:python_houghlines.py

示例11: getPerspective

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def getPerspective(image, points):
    yy, xx, _ = image.shape
    tmp = np.zeros(image.shape[0:2], np.uint8);
    drawContour(tmp, points, (255,), 1)
    houghRatio=houghThreshold//hough_threshold_step

    grid = None
    for i in range(houghRatio):
        lines = cv2.HoughLines(tmp, 1, np.pi / 180, houghThreshold-(i * hough_threshold_step))
        if lines is None:
            continue
        lines = [Line(l[0], l[1]) for l in lines[0]]
        (horizontal, vertical) = partitionLines(lines)
        vertical = filterCloseLines(vertical, horizontal=False)
        horizontal = filterCloseLines(horizontal, horizontal=True)

        if len(vertical) == 2 and len(horizontal) == 2:
            grid = (vertical, horizontal)
            break


    if grid is None:
        return None


    if vertical[0].getCenter()[0] > vertical[1].getCenter()[0]:
        v2, v1 = vertical
    else:
        v1, v2 = vertical

    if horizontal[0].getCenter()[1] > horizontal[1].getCenter()[1]:
        h2, h1 = horizontal
    else:
        h1, h2 = horizontal



    perspective = (h1.intersect(v1),
                   h1.intersect(v2),
                   h2.intersect(v2),
                   h2.intersect(v1))

    ## Doc ##
    #tmp = cv2.cvtColor(tmp, cv2.COLOR_GRAY2BGR)
    #drawContour(tmp, points, (0,0,255), 3)
    #writeDocumentationImage(tmp, "contour_individual_bw")
    #tmp_bw = tmp
    #tmp_orig = image.copy()
    #for tmp in (tmp_bw, tmp_orig):
    #    for l in (v1,v2,h1,h2): l.draw(tmp, (0,255,0), 2)
    #    for p in perspective: drawPoint(tmp, p, (255,0,0), 3)
    #writeDocumentationImage(tmp_bw, "contour_lines_bw")
    #writeDocumentationImage(tmp_orig, "contour_lines_orig")
    ## Doc ##


    return perspective 
开发者ID:nebbles,项目名称:DE3-ROB1-CHESS,代码行数:59,代码来源:perspective.py

示例12: get_chessboard_lines

# 需要导入模块: import cv2 [as 别名]
# 或者: from cv2 import HoughLines [as 别名]
def get_chessboard_lines (corners, image):
	"""
		Function: get_chessboard_lines
		------------------------------
		given a list of corners represented as tuples, this returns 
		(horizontal_lines, vertical_lines) represented as (a, b, c)
		pairs 
	"""
	#=====[ Step 1: get lines via Hough transform on corners ]=====
	corners_img = np.zeros (image.shape[:2], dtype=np.uint8)
	for corner in corners:
		corners_img[int(corner[1])][int(corner[0])] = 255
	lines = cv2.HoughLines (corners_img, 3, np.pi/180, 4)[0]

	#=====[ Step 2: get vertical lines	]=====
	# lines = avg_close_lines_vert (lines)
	lines = [rho_theta_to_abc(l) for l in lines]
	vert_lines = filter_by_slope (lines, lambda slope: (slope > 1) or (slope < -1))
	vert_lines_rt = [abc_to_rho_theta (l) for l in vert_lines]

	#=====[ Step 3: snap points to grid ]===
	points_grid = snap_points_to_lines (vert_lines_rt, corners)

	#=====[ Step 6: hough transform on points in grid to get horizontal lines	]=====
	all_points = [p for l in points_grid for p in l]
	corners_img = np.zeros (image.shape[:2], dtype=np.uint8)
	for p in all_points:
		corners_img[int(p[1])][int(p[0])] = 255
	lines = cv2.HoughLines (corners_img, 3, np.pi/180, 2)[0]
	lines = [rho_theta_to_abc (l) for l in lines]
	horz_lines = filter_by_slope (lines, lambda slope: (slope < 0.1) and (slope > -0.1))
	lines = [abc_to_rho_theta(l) for l in horz_lines]

	horz_lines_rt = avg_close_lines_2 (lines)
	# horz_lines_rt = lines


	print horz_lines_rt
	print vert_lines_rt
	horz_lines = [rho_theta_to_abc (l) for l in horz_lines_rt]
	vert_lines = [rho_theta_to_abc (l) for l in vert_lines_rt]

	return horz_lines, vert_lines 
开发者ID:nebbles,项目名称:DE3-ROB1-CHESS,代码行数:45,代码来源:CVAnalysis_old.py


注:本文中的cv2.HoughLines方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。