2

我正在尝试确定动脉的宽度,并制定了一个非常粗略的程序来验证 drawContours 是否合适。我的问题是轮廓只打印黑色或白色线条,而不是我尝试使用的彩色线条。我不确定我正在绘制的img是否仅限于 bw 或者我的轮廓设置错误。第二个图像是附加到原始图像的轮廓。 输出图像

import cv2
import numpy
from FileSupport import *

# Declared Variables ###########################
# file vars
image_file_name = '14.05.25 hrs __[0011697].avi'  # this will be given through some file selection of the user
temp_image_file_path = ReturnTempImagePath()  # gives file path for .avi files to be stored
# image vars
sample_start_row = 144  # measurements are based off the 640x480 sample image
sample_end_row = 408
sample_start_col = 159
sample_end_col = 518
# colors
RED = (0, 0, 255)  # opencv uses BGR not RGB
GREEN = (0, 255, 0)
BLUE = (255, 0, 0)

# Pull image ###################################
print("Getting image from ", image_file_name, "\n")

artery_vid = cv2.VideoCapture(ReturnImagePath(image_file_name))
if not artery_vid.isOpened():
    print("Couldn't open file")
    sys.exit()

success, image = artery_vid.read()
i_frame = 0
while success:
    image = image[sample_start_row:sample_end_row, sample_start_col:sample_end_col]
    cv2.imwrite(temp_image_file_path + "frame%i.jpg" % i_frame, image)

    # -----Just trying to draw around artery-------
    img = cv2.imread(temp_image_file_path + "frame%i.jpg" % i_frame, cv2.IMREAD_GRAYSCALE)
    hierarchy, threshold = cv2.threshold(img, 120, 200, cv2.THRESH_BINARY)
    contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

    cv2.imshow("Image Without Contours", image)  # contour is also destructive
    cv2.drawContours(img, contours, -1, GREEN, 2)  # I am expecting the contour lines to be green
    cv2.imshow("Image With Contours", img)
    cv2.imshow("Threshold Image", threshold)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    # ---------------------------------------------

    print("Image %i Complete" % i_frame, "\n")
    i_frame += 1
    success, image = artery_vid.read()
4

1 回答 1

11

您的图像是灰度的,因此您需要在绘制彩色轮廓之前将其转换为 BGR。

contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.imshow("Image Without Contours", image)  # contour is also destructive

img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)  #add this line

cv2.drawContours(img, contours, -1, GREEN, 2)  # I am expecting the contour lines to be green
于 2019-11-20T17:02:28.590 回答