在Opencv中映射2个图像

时间:2013-06-04 08:19:50

标签: opencv image-processing

我知道这很简单,但我不能让它在Opencv中运行。我有2张相同尺寸的图像,一张是RGB,另一张是黑白图像。在Opencv中进行一些转换后获得黑白图像。现在我想将黑白图像映射到RGB图像,并且仅保持与黑白图像中的白像素对应的像素。黑色被简单地丢弃了。

在C#中很简单,但由于我使用的是c ++ opencv,我想在openCV中进行。我该怎么办?

在c#中是这样的:

for(i = 0; i < image.lenght; i+=4)
{
if(img_bw != 255)
image[i] = 0;image[i+1] = 0;image[i+2] = 0;
}

2 个答案:

答案 0 :(得分:3)

cv::Mat blackAndWhiteMask = ...; // You black and white image
cv::Mat image = imread("original_image.jpg"); // Your original image
cv::Mat result;
image.copyTo(result, blackAndWhiteMask);
image = result;

答案 1 :(得分:2)

基于http://docs.opencv.org/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html

cv::Mat bw = ...;
cv::Mat clr = ...;  // clr.size() == bw.size()

for(int i = 0; i < bw.rows; ++ i)
{
    uchar* bw_r = bw.ptr<uchar>(i);
    cv::Vec3b* clr_r = clr.ptr<Vec3b>(i);
    for(int j = 0; j < bw.cols; ++j)
        if(br_r[j] != 255)
            clr_r[j] = cv::Vec3b(0, 0, 0);
}