Gostaria de saber como copiar uma matriz de inteiros para um dado do tipo Mat do OpenCV e em seguida mostrar para o usuário através do imshow
?
A seguir segue um exemplo que criei para ilustrar o meu objetivo, que corresponde a uma dada matriz gerada pelo usuário ( variando de 0 ate 255 - variação de cor no OpenCV) ser mostrada na tela em forma de cor através do imshow
. Contudo o que está aparecendo na tela é um quadrado todo preto, ou seja, a copia não esta sendo bem executada uma vez que deveria aparecer uma faixa de cor branca, outra de cor preta e uma terceira de uma cor qualquer.
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/videoio.hpp"
#include "opencv2/video/tracking.hpp"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
using namespace cv;
int main()
{
int image[128][128];
// Zerando a matriz pra nao pegar lixo da memoria
for(int i=0; i< 128 ;i++)
{
for(int j=0; j<128 ; j++)
{
image[i][j]=0;
}
}
// Colorindo a matriz
for(int i=0; i< 128 ;i++)
{
for(int j=0; j<128 ; j++)
{
if(i<40){
image[i][j]=0;
}
if(i>40 && i<80){
image[i][j]=255;
}
if(i>80 && i<128){
image[i][j]=122;
}
}
}
// Criando matriz para mostrar para o usuario
Mat Mostrar(128,128, CV_64FC4 );
// Copiando a matriz original para a outra matriz
for(int i=0; i< 128 ;i++)
{
for(int j=0; j<128 ; j++)
{
Mostrar.at<int>(i,j)= image[i][j];
}
}
// Exibindo a matriz em forma de cor para o usuario
imshow("Exibindo", Mostrar);
waitKey();
return 0;
}