openCV-C++图像总和

openCV-C++ image sum

本文关键字:图像 openCV-C++      更新时间:2023-10-16

**我试图用两张图像制作一张图像(img1的50%+img 2的50%),但结果总是灰色图像**

#pragma once
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <math.h>
void help()
{
    std::cout << "Not enough parameters!" << std::endl;
    system("exit");
}
int main(int argc, char ** argv){
    if (argc < 3)
    {
        help();
        system("pause");
        exit(-1);
    }
    cv::Mat image1 = cv::imread(argv[1]);
    cv::Mat image2 = cv::imread(argv[2]);

//这是我创建新图像的地方。。。结构

    cv::Mat new_img(image1.rows, image1.cols, CV_8UC1);
    for (int i = 0; i < image1.rows; i++)
    {
        for (int j = 0; j < image1.cols; j++)
        {

//这里我用其他2个的总和填充新图像

            new_img.at<uchar>(cv::Point(j, i)) =
                (image1.at<cv::Vec<uchar, 3>>(cv::Point(j, i)).val[0] / 2 + image2.at<cv::Vec<uchar, 3>>(cv::Point(j, i)).val[0]) / 2 +
                 (image1.at<cv::Vec<uchar, 3>>(cv::Point(j, i)).val[1] / 2 + image2.at<cv::Vec<uchar, 3>>(cv::Point(j, i)).val[1] / 2) +
                 (image1.at<cv::Vec<uchar, 3>>(cv::Point(j, i)).val[2] / 2 + image2.at<cv::Vec<uchar, 3>>(cv::Point(j, i)).val[2] / 2);
        }
    }
    cv::namedWindow("Original1", 0);
    cv::imshow("Original1", image1);
    cv::namedWindow("Original2", 0);
    cv::imshow("Original2", image2);
    cv::namedWindow("Suprapuse", 0);
    cv::imshow("Suprapuse", new_img);
    cv::waitKey(0);
    int a = 0;
    return 0;
}

您将new_img设置为CV_8UC1,结果为灰色。如果要将两种颜色的图像添加为新图像,可以使用addWeight并将两种权重设置为0.5。

新图像必须是CV_8CV3(三个通道),因为您的imag1和img2是彩色vec,其中3是三个通道=>您的图像是彩色而非灰度(CV_8CV1)。但我不确定:D