8

OpenCV 2.4.6 を使用しています。4 チャンネル RGB IplImage を 4 チャンネル HSV 画像に変換しようとしています。以下は私のコードです。「OpenCV エラー: アサーションが不明な関数で失敗しました」というエラーが発生しています。cvCvtColor は 3 チャンネルの画像をサポートしていると思います。4 チャンネル RGB を HSV に、または 4 チャンネル RGB を 3 チャンネル RGB に変換する方法はありますか?

 IplImage*  mCVImageColor = cvCreateImageHeader(cvSize(640,480), IPL_DEPTH_8U, 4);
 /*Doing something*/
 IplImage* imgHSV = cvCreateImage(cvGetSize(mCVImageColor), IPL_DEPTH_8U, 4);
 cvCvtColor(mCVImageColor, imgHSV, CV_BGR2HSV); //This line throws exception
4

3 に答える 3

9

一般に、4 番目のチャネルはアルファ (A) チャネルであると想定されています。したがって、正しい変換コードは次のとおりです。

cvCvtColor(mCVImageColor, imgHSV, CV_BGRA2HSV);

BGRAAに注目してください。

また、あなたの構文 (mCVImage...) から、C++ を使用していると思います。では、OpenCV の C++ API を使用してみませんか? C++ を使用することを選択した場合、ドキュメントはまだ古くなっています。OpenCV 2.4.6 の最新の色変換コードは、こちら で確認できます。

あなたの場合、正しい色変換コード (C++) は次のとおりcv::COLOR_BGRA2HSVです。ただし、C++ API を使用している場合は、やプレフィックス付きの関数を使用する代わりにcv::Mat、オブジェクトを使用して関数を呼び出す必要があります。cv::cvtColor(...)IplaImagecv

于 2013-09-26T13:04:57.577 に答える
-2

チャンネルを削除して白に変換するというアイデアがあります。その後、opencv を使用して他の操作を行うことができます。このメソッドは PIL パッケージを使用します。

image = Image.open("original.png")
image.convert("RGBA") # Convert this to RGBA if possible

pixel_data = image.load()

if image.mode == "RGBA":
# If the image has an alpha channel, convert it to white
# Otherwise we'll get weird pixels
for y in range(image.size[1]): # For each row ...
    for x in range(image.size[0]): # Iterate through each column ...
        # Check if it's opaque
        if pixel_data[x, y][3] < 255:
            # Replace the pixel data with the colour white
            pixel_data[x, y] = (255, 255, 255, 255)
image.save("noAlphaChannelImage.png")
于 2018-06-04T19:10:12.257 に答える