1. ホーム
  2. python

[解決済み] OpenCV (Python)でグレースケール画像をRGBに変換する方法は?

2023-01-19 15:54:44

質問

OpenCVを使った画像処理を実時間で学習しています。画像に閾値処理を行い、輪郭を緑でラベル付けしたいのですが、画像が白黒のため緑で表示されません。

プログラムの初期に私は gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) を使ってRGBからグレースケールに変換していましたが、戻るには混乱しますし、関数の backtorgb = cv2.cvtColor(gray,cv2.CV_GRAY2RGB) は与えています。

AttributeError: 'module' オブジェクトは 'CV_GRAY2RGB' という属性を持っていません.

以下のコードでは、緑色の輪郭が描画されていないように見えます。これは、グレースケール画像だからでしょうか?もしそうなら、グレースケール画像をRGBに変換して、緑色の輪郭を可視化することはできますか?

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()

どのように解決するのですか?

私のコメントを回答に昇格させています。

簡単な方法です。

グレー画像を使うのではなく、元の「枠」そのものに描画すればいいのです。

難しい方法(実装しようとしていた方法)。

backtorgb = cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB)

が正しい構文です。