cv :: Мат рама и SCILAB

У меня есть кадр в opencv, который я не хочу сохранять с помощью imwrite (), я использую этот код для извлечения каждого канала и его сохранения, а затем открываю три файла и сначала объединяю новый кадр, это код c ++:

  .........
mean_fb.open("d:\\mean_blue",ios::out);
ostream osb(&mean_fb);
mean_fg.open("d:\\mean_green",ios::out);
ostream osg(&mean_fg);
mean_fr.open("d:\\mean_red",ios::out);
ostream  osr(&mean_fr);
resultframe *= 1.0/255.0; // adjusting the colors of the mean value
for(int row = 0; row < resultframe.rows; row++) {
for (int col = 0; col < resultframe.cols; col++) {
//  std::cout << resultframe.at<cv::Vec3f>(row, col)[1] <<std::endl;
std::cout << resultframe.at<cv::Vec3f>(row, col)[2] <<std::endl;

//fwrite(&resultframe.at<cv::Vec3f>(row,col )[0],sizeof(float),1,inpR);
osr<< resultframe.at<cv::Vec3f>(row, col)[0]<<"\n";
osg<< resultframe.at<cv::Vec3f>(row, col)[1]<<"\n";
osb<< resultframe.at<cv::Vec3f>(row, col)[2]<<"\n";
}
}
.......

сохраненные файлы правильные, поэтому я открываю их с помощью SCILAB, так как размер кадра 1920 * 1080, вот код SCILAB:

  clear
clc
stacksize('max');
cd 'd:\'
width = 1080;
height =1920 ;
im = zeros(width, height);
// read the  values of the red channel

red  = mgetl('mean_red'); // read the file as
red  = matrix(red,[width, height]);
red  = strtod(red);
im(:,:,3) = red;//  because opencv defaullt color Model is BGR
clear red;  // clear red to get enough stack// read the  values of the green channel

green  = mgetl('mean_green'); // read the file as
green  = matrix(green,[width,height]);
green  = strtod(green);
im(:,:,2) = green;
clear green;// read the  values of the blue channel

blue  = mgetl(mean_blue'); // read the file as
blue  = matrix(blue,[width, height]);
blue  = strtod(blue);
im(:,:,1) =blue ;
clear blue;imshow(im);/////////////////////////////////////////

это часть полосатого изображения, которое я получаю введите описание изображения здесь :
Спасибо за вашу помощь

0

Решение

Кажется, вы изменили параметры ширины и высоты. Изображение может быть транспонировано.

0

Другие решения

После предложения Теда W я подумал, что, возможно, мне пришлось переключать ширину и высоту не в SCILAB, а в c ++, и это сработало, так что вот код, если кому-то это нужно:

mean_fb.open("d:\\mean_blue",ios::out);
ostream osb(&mean_fb);
mean_fg.open("d:\\mean_green",ios::out);
ostream osg(&mean_fg);
mean_fr.open("d:\\mean_red",ios::out);
ostream  osr(&mean_fr);
adjusting the colors of the mean value
for (int col = 0; col < resultframe.cols; col++) {
for(int row = 0; row < resultframe.rows; row++) {
//  std::cout << resultframe.at<cv::Vec3f>(row, col)[1] <<std::endl;
std::cout << resultframe.at<cv::Vec3f>(row, col)[2] <<std::endl;

//fwrite(&resultframe.at<cv::Vec3f>(row,col )[0],sizeof(float),1,inpR);
osb<< resultframe.at<cv::Vec3f>(row, col)[0]<<"\n";
osg<< resultframe.at<cv::Vec3f>(row, col)[1]<<"\n";
osr<< resultframe.at<cv::Vec3f>(row, col)[2]<<"\n";
}
}
mean_fb.close();
mean_fr.close();
mean_fg.close();std_fb.open("d:\\std_blue",ios::out);
ostream std_osb(&std_fb);
std_fg.open("d:\\std_green",ios::out);
ostream std_osg(&std_fg);
std_fr.open("d:\\std_red",ios::out);
ostream  std_osr(&std_fr);

for (int col = 0; col < deviationframe.cols; col++)   {
for(int row = 0; row < deviationframe.rows; row++) {

std::cout << deviationframe.at<cv::Vec3f>(row, col)[2] <<std::endl;
std_osb<< deviationframe.at<cv::Vec3f>(row, col)[0]<<"\n";
std_osg<< deviationframe.at<cv::Vec3f>(row, col)[1]<<"\n";
std_osr<< deviationframe.at<cv::Vec3f>(row, col)[2]<<"\n";
}
}
std_fb.close();
std_fr.close();
std_fg.close();
0

По вопросам рекламы [email protected]