欢迎光临散文网 会员登陆 & 注册

OpencvSharp入门学习

2023-07-29 14:59 作者:燃烧的大西几  | 我要投稿

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;




OpencvSharp入门学习的评论 (共 条)

分享到微博请遵守国家法律