Не уверен, почему вы используете Mat с 3 каналами (CV_8UC3 означает 8 байт на пиксель, без знака, 3 канала), если вы хотите получить изображение в градациях серого, вот полный пример того, что вы пытаетесь сделать:
#include "opencv2/highgui.hpp"
#include <vector>
#include <iostream>
#include <ctype.h>
#include <cstdlib>
int main()
{
// create a uint8_t array, can be unsigned char too
uint8_t myArray[120*160];
// fill values
srand(time(0));
for (int i = 0; i < 120*160; ++i)
{
myArray[i] = (rand() % 255) + 1;
}
// create grayscale image
cv::Mat imgGray(120, 160, CV_8UC1, myArray);
cv::namedWindow("test", cv::WINDOW_AUTOSIZE);
cv::imshow("test", imgGray);
cv::waitKey(0);
return 0;
}
Пример выходного изображения: