Я хочу использовать выход Matlab кодера для обработки изображений. Я создал вывод c ++ из Matlab-кодера, я хотел бы использовать этот код для интеграции его в какое-то другое приложение. Проблема в том, что мы не знаем точно, как кодер Matlab генерирует матрицу изображения в const unsigned char […]. Было бы очень полезно, если бы была возможность проверить, как он создан. Чтобы мы могли таким же образом создать изображение в unsigned char [..] и преобразовать его обратно в изображение.
Это код, сгенерированный Matlab
* multiplyImage.c
*
* Code generation for function 'multiplyImage'
*
*/
/* Include files */
#include "rt_nonfinite.h"#include "multiplyImage.h"
/* Function Declarations */
static double rt_roundd_snf(double u);
/* Function Definitions */
static double rt_roundd_snf(double u)
{
double y;
if (fabs(u) < 4.503599627370496E+15) {
if (u >= 0.5) {
y = floor(u + 0.5);
} else if (u > -0.5) {
y = u * 0.0;
} else {
y = ceil(u - 0.5);
}
} else {
y = u;
}
return y;
}
void multiplyImage(const unsigned char img[2115216], double parameter, unsigned
char imgout[2115216])
{
int i0;
double d0;
unsigned char u0;
/* implements a function that multiplies an image with a parameter */
for (i0 = 0; i0 < 2115216; i0++) {
d0 = rt_roundd_snf(parameter * (double)img[i0]);
if (d0 < 256.0) {
if (d0 >= 0.0) {
u0 = (unsigned char)d0;
} else {
u0 = 0;
}
} else if (d0 >= 256.0) {
u0 = MAX_uint8_T;
} else {
u0 = 0;
}
imgout[i0] = u0;
}
}
/* End of code generation (multiplyImage.c) */
У меня проблема с преобразованием неподписанного символа из файла cpp в многомерный массив в соответствии с предложением, приведенным ниже. Но я должен представлять данные в формате c [] w [] h [], я запутался, как из красного, зеленого и синего цветов представить информацию в c [] из следующего. Я запутался, это правильный способ его представления (как вы можете видеть, эта функция предназначена для получения const unsigned char []) и создания вывода с трехмерной матрицей c [] w [] h []. Любая помощь будет отличной
double Marvin_To_UnsignedChar::Convert_To_Marvin_Image(const unsigned char input[])
{
int Initial_Color;
for (int Initial_Height = 0; Initial_Height < Height; ++Initial_Height)
{
for (int Initial_Width = 0; Initial_Width < Width; ++Initial_Width)
{
int red [Initial_Height * Width + Initial_Width] = input[Initial_Width * Height + Initial_Height];
int green[Initial_Height * Width + Initial_Width] = input[Height * Width + Initial_Width * Height + Initial_Height];
int blue [Initial_Height * Width + Initial_Width] = input[2 * Height * Width + Initial_Width * Height + Initial_Width * Height + 1];
int color((red[Initial_Height * Width + Initial_Width]) (green[Initial_Height * Width + Initial_Width]) (blue[Initial_Height * Width + Initial_Width]));
double Marvin_Matrix([color][Width][Height]);
return Marvin_Matrix([color][Width][Height]);
}
}
}
Задача ещё не решена.