2013-02-19 147 views
0

我在opencv中有一个框架,我不想使用imwrite()保存,我使用此代码来提取每个通道并保存它,并打开这三个文件并合并新框架的第一个位置是C++代码:cv :: Mat框架和SCILAB

......... 
    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);///////////////////////////////////////// 

这是我获得的条纹图像的一部分enter image description here: 感谢您的帮助

+0

什么是你的问题?你已经描述了一个场景,没有问过一个问题。你有什么问题 ?你想要什么答案? – Chani 2013-02-19 14:40:42

+0

获取的图像是条纹的,这是我的问题 – Engine 2013-02-19 14:41:23

回答

0

看来你得到的宽度和高度参数相反。图像可能会被调换。

+0

我试过其他方式,但它的确切帮助,但图像被切割 – Engine 2013-02-19 14:50:49

+0

当切换宽度和高度我得到正确的分辨率,只是一个图像的aprt? – Engine 2013-02-19 15:04:18

+0

您是否也计算了3个颜色通道的大小以及可能的alpha通道? – 2013-02-19 15:46:25

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();