【问题标题】:openCV-C++ image sumopenCV-C++ 图像总和
【发布时间】:2017-03-17 22:13:21
【问题描述】:

** 我正在尝试用 2 张图像(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;
}

【问题讨论】:

标签: c++ image opencv


【解决方案1】:

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

【讨论】:

  • Afaik 它被称为 addWeighted 但我没有检查。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2017-08-04
    • 2014-05-15
    • 2022-01-09
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多