使用opencv使图片的背景透明

时间:2013-11-15 09:02:54

标签: image opencv

我查看了大多数其他相关问题,其中大多数都不适用于我的代码。

我正在创建一个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使图像背景透明的方法,我真的很感激。 感谢

1 个答案:

答案 0 :(得分:2)

您可以找到类似的示例here

如果您需要加载透明图像(使用alpha),请使用

imread("map.jpg",-1)

而不是

imread("map.jpg", CV_LOAD_IMAGE_COLOR)

将加载alpha,有关详细信息,请参阅OpenCV Doc