Я пытаюсь преобразовать cv::Mat в буферное изображение без знака int, преобразование не работает, я получаю черное изображение
Mat srcIm, edges;
srcIm = imread("15016889798859437.jpg");
cv::cvtColor(srcIm, srcIm, cv::COLOR_BGR2RGB);
unsigned int *finalSrc = new unsigned int[srcIm.rows*srcIm.cols*3];
unsigned char *input = (unsigned char*)(srcIm.data);
for (int i = 0; i < srcIm.rows; i++) {
for (int j = 0; j < srcIm.cols; j++) {
int r, g, b;
r = input[srcIm.step * j + i];
g = input[srcIm.step * j + i + 1];
b = input[srcIm.step * j + i + 2];
int rgb = ((r & 0x0ff) << 16) | ((g & 0x0ff) << 8) | (b & 0x0ff);
finalSrc[i+ j*srcIm.rows] = rgb;
}
}
cv::Mat videoFrame(srcIm.rows, srcIm.cols, CV_32SC1, finalSrc);
ОБНОВЛЕННЫЙ КОД:
Следуя комментариям, я исправил ошибки, но все равно получаю белое изображение.
unsigned int *finalSrc = new unsigned int[srcIm.rows*srcIm.cols];
unsigned char *input = (unsigned char*)(srcIm.data);
int cn = srcIm.channels();
for (int i = 0; i < srcIm.rows; i++)
{
for (int j = 0; j < srcIm.cols; j++)
{
int r, g, b;
r = input[(i * srcIm.cols * srcIm.channels()) + (j*srcIm.channels()) + 0];
g = input[(i * srcIm.cols * srcIm.channels()) + (j*srcIm.channels()) + 1];
b = input[(i * srcIm.cols * srcIm.channels()) + (j*srcIm.channels()) + 2];
int rgb = ((r & 0x0ff) << 16) | ((g & 0x0ff) << 8) | (b & 0x0ff);
}
}
cv::Mat videoFrame(srcIm.rows, srcIm.cols, CV_32S, finalSrc);
imshow("v", videoFrame);
videoFrame
. 23.08.2017<algorithm>
. 23.08.2017