我查看了大多数其他相关问题,其中大多数不适用于我的代码。
我正在创建一个 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
我将不胜感激。谢谢