1

私は他の関連する質問のほとんどを調べましたが、それらのほとんどは私のコードには当てはまりません。

私は 2D レーシング ゲームを作成しています。背景画像に 2 つの車の画像を追加する必要があります。これを行うには、画像をロードする必要がありましたMat(そのように動作させることができました)。

問題は、私の車 (.png) の背景がフクシア色で、透明にしたいということではありません。解決策のほとんどは、私が試した画像をロードすることを含みIplImage、どういうわけか私のコードの他の部分を台無しにしました。

 #include <opencv\cv.h>
 #include <stdio.h>
 #include <opencv\highgui.h>
 #include <iostream>


 using namespace std;
 using namespace cv;

int main()
{
Mat car1, car2, BKGR;

int key = 0;

/* load images and checks if correct images loaded */
 BKGR = imread("map.jpg", CV_LOAD_IMAGE_COLOR); //937x768
car1 = imread("car1.png", CV_LOAD_IMAGE_COLOR); //70x75
car2 = imread("car2.png", CV_LOAD_IMAGE_COLOR); //70x75

if((!BKGR.data)||(!car1.data)||(!car2.data))
    cout << "Could not open one or more images." << endl;
else 
    cout << "Images were loaded succesfully." << endl;
    waitKey(0);

    car1.copyTo(BKGR.colRange(450,520).rowRange(630,705));
    car2.copyTo(BKGR.colRange(350,420).rowRange(430,505));
    waitKey(0);

    cv::floodFill(car1, cv::Point(150,150), cv::Scalar(255.0, 255.0, 255.0));
    cv::floodFill(car2, cv::Point(150,150), cv::Scalar(255.0, 255.0, 255.0));

/* create a window, display the result, wait for a key */
cvNamedWindow("Game", CV_WINDOW_AUTOSIZE);
imshow("Game", BKGR);


cvWaitKey(0);
return 0;
 }

ですから、画像の背景を透明にする方法を知っていれば、IplImage私は本当に感謝しています. ありがとう

4

1 に答える 1

2

ここで同様の種類の例を見つけることができます

そして、透明な画像(アルファ付き)をロードする必要がある場合は、使用します

imread("map.jpg",-1)

それ以外の

imread("map.jpg", CV_LOAD_IMAGE_COLOR)

アルファをロードします。詳細については、 OpenCV Docを参照してください。

于 2013-11-15T09:49:31.237 に答える