2014-11-12 2 views
0

** Я пытаюсь сделать изображение из 2-х изображений (50% Img1 + 50% от IMG 2), но результат всегда серое изображение **OpenCV-C++ сумма изображение

#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; 
} 
+1

http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#addweighted – berak

+1

сначала вам нужно включить правильный заголовок! – Engine

ответ

0

Вы устанавливаете new_img как CV_8UC1, результат серый. Если вы хотите добавить два цветных изображения в качестве нового изображения, вы можете использовать addWeight и установить два веса в 0.5.

+0

Afaik его называется addWeight, но я не проверял. – Micka

-1

Новое изображение должно быть CV_8CV3 (три канала), потому что ваши imag1 и img2 являются цветными vec, где 3 - это три канала => ваше изображение цветное без оттенков серого (CV_8CV1). Но я не уверен: D

Смежные вопросы