Opencv 笔记-imwrite函数用法

在看到Opencv3编程入门的图像输入、显示和输出部分时,在imwrite函数应用时碰到程序理解困难的问题。通过查阅资料汇总理解。

void createAlphaMat(Mat &mat)
{
 for(int i = 0; i < mat.rows; ++i) {                                                                      
  for(int j = 0; j < mat.cols; ++j) {                                                                                                                          
   Vec4b&rgba = mat.at<Vec4b>(i, j);
   rgba[0]= UCHAR_MAX;
   rgba[1]= saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) *UCHAR_MAX);
   rgba[2]= saturate_cast<uchar>((float (mat.rows - i)) / ((float)mat.rows) *UCHAR_MAX);
   rgba[3]= saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2]));
  }
 }
}

rows 表示:行                    cols  表示:列   

Vec4b&rgba = mat.at<Vec4b>(i, j);  :

mat.at(i,j),从mat中取出一个像素,像素的类型是Vec4b,该类型含义是,有4个UCHAR类型的元素,

其中rgba[0]、rgba[1]、rgab[2]代表像素的三原色,BGR,即为蓝色(Blue)、Green(绿色)、红色(Red)。

rgba[3]代表像素的的Alpha值,表示像素的透明度。 其中:.at 表示Mat accessing pixels(at) 读取一针像素

  saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) *UCHAR_MAX); :

//-----------------------------------【ShowHelpText( )函数】----------------------------------
//          描述:输出一些帮助信息
//----------------------------------------------------------------------------------------------
void ShowHelpText()
{
 //输出欢迎信息和OpenCV版本
 printf("\n\n\t\t\t非常感谢购买《OpenCV3编程入门》一书!\n");
 printf("\n\n\t\t\t此为本书OpenCV3版的第15个配套示例程序\n");
 printf("\n\n\t\t\t   当前使用的OpenCV版本为:" CV_VERSION );
 printf("\n\n  ----------------------------------------------------------------------------\n");
}

int main( )
{
 //创建带alpha通道的Mat
 Mat mat(480, 640, CV_8UC4);
 createAlphaMat(mat);

 ShowHelpText();

 vector<int>compression_params;
 //此句代码的OpenCV2版为:
 //compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
 //此句代码的OpenCV3版为:
 compression_params.push_back(IMWRITE_PNG_COMPRESSION);
 compression_params.push_back(9);

 //显示图片
 try{
  imwrite("透明Alpha值图.png", mat, compression_params);
  imshow("生成的png图",mat);
  fprintf(stdout,"PNG图片文件的alpha数据保存完毕~\n可以在工程目录下查看由imwrite函数生成的图片\n");
  waitKey(0);
 }
 catch(runtime_error& ex) {
  fprintf(stderr,"图像转换成PNG格式发生错误:%s\n", ex.what());
  return 1;
 }

 return 0;
}

发布了18 篇原创文章 · 获赞 1 · 访问量 2680

猜你喜欢

转载自blog.csdn.net/taochengwu123/article/details/84848773