《学习OpenCV(中文版)》
作者:(美)布拉德斯基(Bradski,G.)
(美)克勒(Kaehler,A.) 著
出版社:清华大学出版社
出版时间:2009年10月
参考资料:https://www.cnblogs.com/YiXiaoZhou/p/5910730.html
https://blog.csdn.net/iawfy_/article/details/124398457
https://blog.csdn.net/CAI____NIAO/article/details/112803041
一、图像通道
- 常见的彩色图像为 RGB 类型
- OpenCvSharp中对应的是 BGR 类型 ,注意对应通道。
调用库内函数时,用一部分对输入图像格式用要求 , 需要使用改变图像的格式的方法
- Mat.ConvertTo()方法。
二、透明度
- BGRA格式图像的应用
将BGR图像转换成BGRA图像 可以使用 Mat.ConvertTo()
也能使用Cv2.CvtColor(),
当然也能自己将BGR图像拆分通道,新建一个通道,在组合成一个新的四通道图像。
注意保存图像的格式要选择支持BGRA图像的格式保存,如.png。
在RGB色彩空间三个通道的基础上,还可以加上一个A通道,也叫alpha通道,表示透明度。这种4个通道的色彩空间被称为RGBA色彩空间,PNG图像是一种典型的4通道图像。
alpha通道的赋值范围是[0, 1],或者[0, 255],表示从透明到不透明。
三、绘制命令
- Cv2.Line 直线
- Cv2.Rectangle 矩形
- Cv2.Circle 圆
- Cv2.Ellipse 椭圆
- Cv2.Polylines 多边形轮廓
- Cv2.DrawContours 多边形填充
- Cv2.PutText 文本
四、程序
1、程序C220912:调用电脑本机图片并画图的OpenCV程序。
private void button1_Click(object sender, EventArgs e)
{
Scalar s = new Scalar(255, 255, 255);//创建一个颜色对象
Mat mm = new Mat(210, 210, MatType.CV_8UC3, s);
Mat output_image = new Mat(); ;
List<OpenCvSharp.Point> pts1 = new List < OpenCvSharp.Point >
{
new OpenCvSharp.Point(0, 76),
new OpenCvSharp.Point(80, 76),
new OpenCvSharp.Point(106, 0),
new OpenCvSharp.Point(130, 76),
new OpenCvSharp.Point(210, 76),
new OpenCvSharp.Point(146, 124),
new OpenCvSharp.Point(170, 210),
new OpenCvSharp.Point(106, 152),
new OpenCvSharp.Point(40, 210),
new OpenCvSharp.Point(64, 124)
};
List<List<OpenCvSharp.Point>> pts = new List<List<OpenCvSharp.Point>>() { pts1 };
//画五角星
Cv2.Polylines(mm, pts, true, new Scalar(0, 0, 255), 2);
Cv2.DrawContours(mm, pts,-1, new Scalar(0, 255,0),-1,LineTypes.AntiAlias); //线宽:-1时代表填充区域
//
OpenCvSharp.Size size = new OpenCvSharp.Size(80, 50);
OpenCvSharp.Scalar scalar = new OpenCvSharp.Scalar(0, 100, 200);
//绘制椭圆 参数1:操作图像 2:椭圆中心 3:以椭圆长轴和短轴长度为边界的矩形区域,椭圆就绘制在这个矩形区域 4:椭圆旋转角度 5:起始角度 6:终止角度 7:颜色 8:线宽 9:线型 10:缩放参数(0为不缩放)
Cv2.Ellipse(mm, new OpenCvSharp.Point(0, 20), size, 180, 90, 270, scalar, -1, LineTypes.AntiAlias, 0);
mm.ConvertTo(output_image, MatType.CV_8UC4, 0);
Cv2.ImWrite("output image.png", output_image);//支持jpg、png格式
pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mm);
网友评论