天天看点

python opencv 图像灰度化,如何在OpenCV(Python)中将灰度图像转换为RGB,以便在处理二进制图像后可视化轮廓?...

python opencv 图像灰度化,如何在OpenCV(Python)中将灰度图像转换为RGB,以便在处理二进制图像后可视化轮廓?...

I am learning image processing using OpenCV for a realtime application. I did some thresholding on an image and want to label the contours in green, but they aren't showing up in green because my image is in black and white.

Early in the program I used gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) to convert from RGB to grayscale, but to go back I am confused, and the function backtorgb = cv2.cvtColor(gray,cv2.CV_GRAY2RGB) is giving AttributeError: 'module' object has no attribute 'CV_GRAY2RGB'.

The code below does not appear to be drawing contours in green - is this because it's a greyscale image? If so, can I convert the grayscale image back to RGB to visualize the contours in green?

import numpy as np

import cv2

import time

cap = cv2.VideoCapture(0)

while(cap.isOpened()):

ret, frame = cap.read()

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

ret, gb = cv2.threshold(gray,128,255,cv2.THRESH_BINARY)

gb = cv2.bitwise_not(gb)

contour,hier = cv2.findContours(gb,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)

for cnt in contour:

cv2.drawContours(gb,[cnt],0,255,-1)

gray = cv2.bitwise_not(gb)

cv2.drawContours(gray,contour,-1,(0,255,0),3)

cv2.imshow('test', gray)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

解决方案

I am promoting my comment to an answer:

The easy way is:

You could draw in the original 'frame' itself instead of using gray image.

The hard way (method you were trying to implement):

backtorgb = cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB) is the correct syntax.