《Open CV3编程入门》学习笔记1

1.输入显示
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;

int main(  ){ 

	Mat srcImage=imread("pic.jpg",2|4);//第二个参数>0返回一个3通道的彩色图像;=0返回灰度图像(可自行转化);<0返回包含Alpha通道的加载图像;2|4载入无损的源图像
	//若以彩色模式载入图像,解码后会以BGR的通道顺序进行存储,而不是通常的RGB顺序,自带默认值为1
	//namedWindow("dog",1);//创建窗口,同OpenCV1,即下行代码,第二个还可以为WINDOW_OPENGL从而支持OpenGL(广泛接纳的2D/3D图形API)
	//cvNamedWindow("Example1",0);
	imshow("dog",srcImage);//若窗口第二个参数不是1则进行缩放,而imshow缩放图像取决于图像的深度,若是简单显示可以省略上述窗口的命名,但在显示之前要使用窗口则需在前面定义
	waitKey(0);
	destroyWindow("dog");//事实上,对于代码量不大的简单程序没必要手动调用以下函数,因为在退出时,所有资源和窗口会被操作系统自动关闭
	destroyAllWindows();


}

2.imwrite()函数

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<vector>
using namespace cv;
using namespace std;


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;//R分量最大,所以整体偏红
		rgba[1]=saturate_cast<uchar>((float (mat.cols-j))/((float)mat.cols)*UCHAR_MAX);//uchar占一个字节0~255,最大可保存整型到255,saturate_cast()就是防止数据溢出
		rgba[2]=saturate_cast<uchar>((float (mat.cols-i))/
		((float)mat.rows)*UCHAR_MAX);
		rgba[3]=saturate_cast<uchar>(0.5*(rgba[1]+rgba[2]));
		}
	}
}
int main(  ){ 
Mat mat(480,640,CV_8UC4);//CV_8UC4--则可以创建-----8位无符号的四通道---带透明色的RGB图像 
createAlphaMat(mat);
vector<int>compression_params;//声明一个int型向量
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);//push_back在vector类中作用为在vector尾部加入一个数据。
compression_params.push_back(9);
try{//try{}这不是一个函数,是一个语句块,如果加了try{}标识如果这一块语句有问题的话,任然可以通过编译,错误会被忽略,这是一套语句,还应该有捕捉的catch语句来捕捉异常。
imwrite("透明Alpha值图.png",mat,compression_params);//第一个参数,文件名需带后缀;第二个参数一般填一个Mat类型的图像数据;第三个参数,const vector<int>&类型的params,
//表示特定格式保存的参数编码,有默认值一般不需要填写,如需要:1.对于JPGA格式的图片,这个参数表示从0到100的图像质量(CV_IMWRITE_JPEG_QUALITY),默认值是95;2.对于PNG
//格式的图片,这个参数表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0到9.较高的值意味着更小的尺寸和更长的压缩时间,默认值是3;3.对于PPM,PGM或PBM格式的图片,这个参数
//表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或1,默认值是1;
imshow("生成的PNG图",mat);
fprintf(stdout,"PNG图片文件的alpha数据保存完毕~\n可以在工程目录下查看由imwrite函数生成的图片\n");//printf(...)=fprintf(stdout,...)
waitKey(0);}
catch(runtime_error& ex){//捕捉错误
fprintf(stderr,"图像转换为PNG格式发生错误:%s\n",ex.what());//stderr是无缓冲的,会直接输出;
//stdout -- 标准输出设备 (printf("..")) 同 stdout; stderr -- 标准错误输出设备,两者默认向屏幕输出;但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。 
return 1;
}
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值