Как создать вектор объектов cv :: Mat? - PullRequest
0 голосов
/ 17 апреля 2020

Я борюсь с opencv в C ++.

Сначала создайте 3 cv::Mat и выполните некоторые операции в каждом из них.

Затем я хочу создать вектор (с именем total_img) из всех cv::Mat объектов.

Я не мог заставить его работать. Мой код:

#include <opencv2/opencv.hpp>

int main(int argc, char** argv)
{
 cv::Mat img_b;
 cv::Mat img_g;
 cv::Mat img_r;

 // some operation in each channel

 std::vector<cv::Mat> total_img;

 total_img[0] = img_b;
 total_img[1] = img_g;
 total_img[2] = img_r;

 return 0;
}

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Но вы читаете реальное изображение или пытаетесь работать с пустыми матрицами? Это способ разделения изображения BGR на 3 отдельные матрицы, изменения положения синего и красного каналов и последующего их объединения:

cv::Mat inputImage = cv::imread( "img.png",CV_LOAD_IMAGE_COLOR ); //load image
cv::Mat BGRchannels[3];   //destination matrices
cv::split( inputImage , BGRchannels );//split source  

//show the individual channels:
cv::imshow( "B", BGRchannels[0] ); //blue channel
cv::imshow( "G", BGRchannels[1] ); //green channel
cv::imshow( "R", BGRchannels[2] ); //red channel

//merge the channels back:
std::vector<cv::Mat> tempMats; //vector of temp mats

//change the order of the B and R channels:
tempMats.push_back( BGRchannels[2] ); 
tempMats.push_back( BGRchannels[1] );
tempMats.push_back( BGRchannels[0] );

cv::Mat mergedBGR; //output matrix
cv::merge( tempMats, mergedBGR ); //merge the matrices

//show the merged mat, with the B & R channels interchanged:
cv::imshow( "mergedMat", BGRchannels[2] );
0 голосов
/ 17 апреля 2020

Я думаю, что вы ищете cv::merge.

#include <opencv2/opencv.hpp>

int main(int argc, char** argv)
{
    cv::Mat img_b;
    cv::Mat img_g;
    cv::Mat img_r;

    // some operation in each channel
    vector<cv::Mat> channels;
    channels.push_back(img_b);
    channels.push_back(img_g);
    channels.push_back(img_r);

    // Merge the three channels
    cv::Mat fin_img;
    cv::merge(channels, fin_img);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...