OpencvSharp入门学习

OpencvSharp笔记 Mat:矩阵
using OpenCvSharp;
一:加载图像文件
//加载图像,返回Mat对象,fileName为图像的路径+名字
Mat img = CV2.ImRead(fileName , ImreadModes.Color); //加载为彩色图像,结果是三通道
Mat img = CV2.ImRead(fileName , ImreadModes.Grayscale); //加载为灰度图像,结果是单通道
Mat img = CV2.ImRead(fileName , ImreadModes.AnyColor); //加载任意图像,结果随图像,原图为几通道就是几通道
二:显示图像文件
CV2.ImShow("窗口名称", img); //img是将要显示的Mat对象,此处显示Mat对象必须是BGR格式,其他像素格式需要转回BGR格式再显示
CV2.WaitKey(); //用于CV2.ImShow的等待。没有此句则立即执行下一行代码
三:颜色转换 ColorConversionCodes是枚举
Mat img = CV2.ImRead(fileName , ImreadModes.Color); //加载彩色图像
Mat gray = new Mat();
CV2.CvtColor(img , gray , ColorConversionCodes.BGR2GRAY); //将img图像转为灰度图格式
Mat hsy = new Mat();
CV2.CvtColor(img , hsy , ColorConversionCodes.BGR2HSV); //将BGR格式转为HSV格式
四:尺寸调整
Mat result = new Mat();
CV2.Resize(img , result , new OpenCvSharp.Size(100,100)); //括号内100,100 为像素大小
CV2.Resize(img , result , new OpenCvSharp.Size(0,0),2,2); //若括号内为0,0 则表示用外面的2,2 意思是放大倍数
//CV2.Resize方法有多个重载
五:二值化
Mat gray = new Mat();
CV2.CvtColor(img , gray , ColorConversionCodes.BGR2GRAY); //转为灰度图
Scalar scalar = CV2.Mean(gray); //计算灰度图平均值
CV2.Threshold(gray , gray , scalar.va10 , 255 , ThreshoidTypes.Binary); //二值化(即黑白二色)
六:四则运算 注:不可以单通道图和多通道图相运算,只能:单通道与单通道,多通道与多通道运算
CV2.BitwiseAnd //与运算
CV2.BitwiseNot //取反运算
CV2.BitwiseOr //或运算
CV2.BitwiseXor //异或运算
CV2.Add //两图相加
CV2.Subtract //两图相减
CV2.Multiply //乘法
CV2.Divide //除法
七:颜色分割
// HSV:H为颜色范围
//常见的颜色范围:Orange: 0~22 Yellow:22~38 Green:38~75 Blue:75~130 Violet:130~160 Red:160~179
//见截图,桌面 yansefenge
八:直线检测
CV2.ImShow("haha",img);
Mat gray = ConvertToBlackBinary(img); //二值化
CV2.ImShow("二值化",gray);
var kenal3 = CV2.GetStructuringElement(MorphShapes.Rect , new OpenCvSharp.Size(2,2)); // 腐蚀
CV2.Dilate(gray , gray , kenal3); //膨胀
CV2.ImShow("二值化Dilate" , gray);
CV2.Canny(gray , gray , 50 , 150); //找轮廓
CV2.ImShow("Canny" , gray);
var lines = CV2.HoughLinesP(gray , 1 , Math.PI/180 , 100 , 250 , 50); //划线
if(lines.Length>0)
{
for(int i=0 ; i<lines.Length ; i++)
{
CV2.Line(img , lines[i].P1 , lines[i].P2 , new Scalar(255 , 0 , 0) , 1 , LineTypes.AntiAlias);
}
}
CV2.ImShow("结束" , img);
return img;