广西建设工程质量检测协会网站公司邮箱怎么登陆

张小明 2026/1/10 18:02:54
广西建设工程质量检测协会网站,公司邮箱怎么登陆,rtt全民互助平台网站开发,做网站设计的公司排名先讲讲思路#xff0c;图片是一组庞大的矩阵数据#xff0c;每一个像素点有用数据为五个分别为RGB#xff08;三原色#xff09;#xff0c;以及XY坐标。也就是说我们能将整张图片每一个像素点的数据提取出来加以分析。那么就可以做到图片识别。源代码会在最下方贴出。首先…先讲讲思路图片是一组庞大的矩阵数据每一个像素点有用数据为五个分别为RGB三原色以及XY坐标。也就是说我们能将整张图片每一个像素点的数据提取出来加以分析。那么就可以做到图片识别。源代码会在最下方贴出。首先整个流程思想是这杨复制代码#region 6孔混合鱼苗VisionHelper.Two_Level(C:\Users\Administrator\Desktop\右上角三只鱼的提取\小鱼图片2-单个.png, C:\Users\Administrator\Desktop\3.1\二级化.png);VisionHelper.Outline(C:\Users\Administrator\Desktop\3.1\二级化.png, C:\Users\Administrator\Desktop\3.1\轮廓检测.png);VisionHelper.CutCircle(C:\Users\Administrator\Desktop\3.1\轮廓检测.png, C:\Users\Administrator\Desktop\3.1\圆形剪切.bmp);VisionHelper.ExtractCircle(C:\Users\Administrator\Desktop\3.1\圆形剪切.bmp, C:\Users\Administrator\Desktop\3.1\圆形提取.jpg);var data VisionHelper.GetImagePixel(C:\Users\Administrator\Desktop\3.1\圆形提取.jpg);data VisionHelper.FishExtract(data, C:\Users\Administrator\Desktop\3.1\圆形提取.jpg);var fish VisionHelper.FishGroup(data);fish VisionHelper.FishDistinct(fish);data VisionHelper.FishCenter(fish);#endregion复制代码先将抓取的图片二级化,效果如下所示VisionHelper.Two_Level(C:\Users\Administrator\Desktop\右上角三只鱼的提取\小鱼图片2-单个.png, C:\Users\Administrator\Desktop\3.1\二级化.png);原图左处理图右小鱼图片2-单个小鱼图片2-单个-二级化处理二级化以后这张图片的数据就只剩黑色和白色如果二级化时没有损坏到目标特征像素点那么接下来提取目标特征像素点会很容易因为只有黑白两色接下来做轮廓监测将整个培养皿扫描出来并且去除这杨就只剩培养皿内的鱼苗和食物或者排泄物VisionHelper.Outline(C:\Users\Administrator\Desktop\3.1\二级化.png, C:\Users\Administrator\Desktop\3.1\轮廓检测.png);效果如下所示小鱼图片2-单个-二级化处理 小鱼图片2-单个-轮廓处理在图片处理的算法中我用红圈标注了培养皿内的区域并且用蓝点打出了中心接下来呢可以将其他无用的图片区域全部剪切掉就是图片内圆形切割VisionHelper.CutCircle(C:\Users\Administrator\Desktop\3.1\轮廓检测.png, C:\Users\Administrator\Desktop\3.1\圆形剪切.bmp);切割效果如下图所示小鱼图片2-单个-轮廓处理image因为当初代码里设定生成的图片是BMP,上传不了博客所以这粗糙的截图一下。可以看到圆形剪切.bmp里只剩培养皿内区域的图片了之前轮廓处理和圆形剪切形成的红色,蓝色圆圈或者中心点代码里可以设置不写入那么接下来就是对圆形剪切区域的有用像素进行提取和分析复制代码var data VisionHelper.GetImagePixel(C:\Users\Administrator\Desktop\3.1\圆形提取.jpg);data VisionHelper.FishExtract(data, C:\Users\Administrator\Desktop\3.1\圆形提取.jpg);var fish VisionHelper.FishGroup(data);fish VisionHelper.FishDistinct(fish);data VisionHelper.FishCenter(fish);复制代码我先展示下最终的结果image经过我进行数据处理后的图片内提取出了三条鱼的中心点位数据我们校验一下答案下图1是原图小鱼图片2-单个三个小黑点是三条鱼数据正确坐标是否正确我用画图工具打开校验如下三图所示为了更直观的展示结果用鼠标浮在指定坐标手机拍摄的不是很清楚但是看得清大家可以双击图片放大微信图片_20250928141219第一条数据15177在图内鼠标右上角指向的小鱼苗内微信图片_20250928141224第二条数据2288在图内鼠标左侧指向的小鱼苗内微信图片_20250928141228第三条数据13714888在图内鼠标右下角指向的小鱼苗内接下来贴出我手搓的核心算法整个VisionHelper运用了OpenCvSharp和Emgu.CV这两个第三方图片处理框架的算法所有的方法都可以灵活运用方法体内的参数可以随着实际需要识别的物体做调整源代码里有那么多注释应该就不用在讲解基础框架和算法应用了吧嘻嘻复制代码using Emgu.CV;using Emgu.CV.CvEnum;using Emgu.CV.Structure;using OpenCvSharp;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using FishVision.Model;namespace FishVision{public class VisionHelper{/// summary/// 1.二级化/// /summary/// param nameoldpath/param/// param namenewPath/parampublic static void Two_Level(string oldpath,string newPath){Emgu.CV.Mat image CvInvoke.Imread(oldpath, Emgu.CV.CvEnum.ImreadModes.Grayscale);Emgu.CV.Mat mid new Emgu.CV.Mat();CvInvoke.Threshold(image, mid, 125, 255, ThresholdType.Binary);//180 改CvInvoke.Imwrite(newPath, mid);}/// summary/// 2.轮廓检测/// /summarypublic static void Outline(string oldpath, string newPath){//读取图片var img Cv2.ImRead(oldpath);//转换成灰度图OpenCvSharp.Mat gray img.CvtColor(ColorConversionCodes.BGR2GRAY);//阈值操作 阈值参数可以用一些可视化工具来调试得到OpenCvSharp.Mat ThresholdImg gray.Threshold(135, 255, ThresholdTypes.Binary);//Cv2.ImShow(Threshold, ThresholdImg);//降噪 高斯变化//Mat gaussImg ThresholdImg.GaussianBlur(new Size(5, 5), 0.8);//Cv2.ImShow(GaussianBlur, gaussImg);//中值滤波降噪//Mat medianImg ThresholdImg.MedianBlur(5);//Cv2.ImShow(MedianBlur, medianImg);//膨胀腐蚀//Mat kernel new Mat(15, 15, MatType.CV_8UC1);//Mat DilateImg ThresholdImg.Dilate(kernel);////腐蚀处理//Mat binary DilateImg.Erode(kernel);OpenCvSharp.Mat element Cv2.GetStructuringElement(MorphShapes.Ellipse, new OpenCvSharp.Size(3, 3));OpenCvSharp.Mat openImg ThresholdImg.MorphologyEx(MorphTypes.Open, element);//Cv2.ImShow(Dilate Erode, openImg);//设置感兴趣的区域int x 0, y 0, w img.Width, h img.Height;Rect roi new Rect(x, y, w, h);OpenCvSharp.Mat ROIimg new OpenCvSharp.Mat(openImg, roi);//Cv2.ImShow(ROI Image, ROIimg);//寻找图像轮廓OpenCvSharp.Point[][] contours;HierarchyIndex[] hierachy;Cv2.FindContours(ROIimg, out contours, out hierachy, RetrievalModes.List, ContourApproximationModes.ApproxTC89KCOS);//根据找到的轮廓点拟合椭圆for (int i 0; i contours.Length; i){//拟合函数必须至少5个点少于则不拟合if (contours[i].Length 150 || contours[i].Length 200) continue;//椭圆拟合var rrt Cv2.FitEllipse(contours[i]);//ROI复原rrt.Center.X x;rrt.Center.Y y;//画椭圆Cv2.Ellipse(img, rrt, new Scalar(0, 0, 255), 2, LineTypes.AntiAlias);//画圆心Cv2.Circle(img, (int)(rrt.Center.X), (int)(rrt.Center.Y), 4, new Scalar(255, 0, 0), -1, LineTypes.Link8, 0);}//Cv2.ImShow(Fit Circle, img);Cv2.ImWrite(newPath, img);}/// summary/// 3.圆形剪切/// /summary/// param nameoldpath/param/// param namenewPath/parampublic static void CutCircle(string oldpath, string newPath){ImageBgr, Byte src new ImageBgr, byte(oldpath);int scale 1;if (src.Width 500){scale 2;}if (src.Width 1000){scale 10;}if (src.Width 10000){scale 100;}var size new System.Drawing.Size(src.Width / scale, src.Height / scale);ImageBgr, Byte srcNewSize new ImageBgr, byte(size);CvInvoke.Resize(src, srcNewSize, size);//将图像转换为灰度Emgu.CV.UMat grayImage new Emgu.CV.UMat();CvInvoke.CvtColor(srcNewSize, grayImage, ColorConversion.Bgr2Gray);//使用高斯滤波去除噪声CvInvoke.GaussianBlur(grayImage, grayImage, new System.Drawing.Size(3, 3), 3);//霍夫圆检测CircleF[] circles CvInvoke.HoughCircles(grayImage, Emgu.CV.CvEnum.HoughModes.Gradient, 2.0, 200.0, 100.0, 180.0, 5);Rectangle rectangle new Rectangle();float maxRadius 0;foreach (CircleF circle in circles){var center circle.Center;//圆心var radius circle.Radius;//半径if (radius maxRadius){maxRadius radius;rectangle new Rectangle((int)(center.X - radius) * scale,(int)(center.Y - radius) * scale,(int)radius * 2 * scale scale,(int)radius * 2 * scale scale);}srcNewSize.Draw(circle, new Bgr(System.Drawing.Color.Blue), 4);}//CvInvoke.Imwrite(原始图片.bmp, srcNewSize); //保存原始图片if (maxRadius 0){//MessageBox.Show(没有圆形);}CvInvoke.cvSetImageROI(srcNewSize.Ptr, rectangle);//设置兴趣点—ROIregion of interest var clone srcNewSize.Clone();CvInvoke.Imwrite(newPath, clone); //保存结果图src.Dispose();srcNewSize.Dispose();grayImage.Dispose();}/// summary/// 4.圆形提取/// /summarypublic static void ExtractCircle(string oldpath, string newPath){// 加载原始图片Bitmap originalImage new Bitmap(oldpath);int diameter Math.Min(originalImage.Width, originalImage.Height); // 获取最小边长作为直径int x (originalImage.Width - diameter) / 2; // 计算起始x坐标int y (originalImage.Height - diameter) / 2; // 计算起始y坐标// 创建与圆形大小相等的bitmapBitmap croppedImage new Bitmap(diameter, diameter);using (Graphics g Graphics.FromImage(croppedImage)){g.Clear(Color.LightBlue); // 设置圆圈外的颜色// 设置高质量插值法g.InterpolationMode InterpolationMode.HighQualityBicubic;// 设置高质量,低速度呈现平滑程度g.SmoothingMode SmoothingMode.HighQuality;g.PixelOffsetMode PixelOffsetMode.HighQuality;g.CompositingQuality CompositingQuality.HighQuality;// 创建一个圆形路径using (GraphicsPath path new GraphicsPath()){path.AddEllipse(0, 0, diameter, diameter);// 设置裁剪区域为圆形路径g.SetClip(path);// 从原始图片中绘制圆形区域到新图片g.DrawImage(originalImage, new Rectangle(0, 0, diameter, diameter), x, y, diameter, diameter, GraphicsUnit.Pixel);}}// 保存剪切后的图片croppedImage.Save(newPath, ImageFormat.Jpeg);}/// summary/// 5.像素提取默认黑像素/// /summary/// param nameimg/param/// returns/returnspublic static Liststring GetImagePixel(string oldpath)//过滤{// 加载原始图片Bitmap img new Bitmap(oldpath);//0 黑色//95 深灰//240 浅灰//255 白Listint R new Listint();Listint G new Listint();Listint B new Listint();Liststring xyList new Liststring();for (int y 0; y img.Height; y){for (int x 0; x img.Width; x){var a img.GetPixel(x, y);if (a.R 0 a.G 0 a.B 0){R.Add(img.GetPixel(x, y).R);G.Add(img.GetPixel(x, y).G);B.Add(img.GetPixel(x, y).B);xyList.Add(x | y);}}}return xyList;}/// summary/// 6.鱼像素提取/// /summary/// returns/returnspublic static Liststring FishExtract(Liststring data ,string circleImg){for (int i 0; i data.Count; i){var str data[i].Split(|);if (!string.IsNullOrWhiteSpace(data[i])){Bitmap image2 new Bitmap(circleImg);//周边检测 6var list GetSurroundingPixels(image2, Convert.ToInt32(str[0]), Convert.ToInt32(str[1]));if (list.Where(a a.R 0 a.G 0 a.B 0).Count() 2)//这是鱼像素特征{}else{data[i] string.Empty;//非鱼}}}return data;}//像素周边检测public static ListFishVision.Model.Pixel GetSurroundingPixels(Bitmap bitmap, int x, int y){var result new ListFishVision.Model.Pixel();int width bitmap.Width;int height bitmap.Height;Color[,] surroundingPixels new Color[3, 3]; // 3x3 grid including the center pixelfor (int i -1; i 1; i) // Loop through the 3x3 grid around the center pixel{for (int j -1; j 1; j){int newX x i;int newY y j;// Check if the new coordinates are within the bounds of the imageif (newX 0 newX width newY 0 newY height){surroundingPixels[i 1, j 1] bitmap.GetPixel(newX, newY);}else{// Optionally, set out-of-bounds pixels to a default color or handle them as neededsurroundingPixels[i 1, j 1] Color.Transparent; // or any other color you prefer}}}// Use surroundingPixels as needed (e.g., print colors)for (int i 0; i 3; i) // Printing the surrounding pixels for demonstration purposes{for (int j 0; j 3; j){var model new FishVision.Model.Pixel();model.X x i - 1;model.Y y j - 1;model.R surroundingPixels[i, j].R;model.G surroundingPixels[i, j].G;model.B surroundingPixels[i, j].B;result.Add(model);//Console.WriteLine($Pixel ({x i - 1}, {y j - 1}): {surroundingPixels[i, j]});}}return result;}/// summary/// 7.鱼像素去重/// /summary/// param namelistFish/param/// returns/returnspublic static ListFishModel FishDistinct(ListFishModel listFish){if (listFish ! null listFish.Count() 0){for (int i 0; i listFish.Count; i){listFish[i].FishIndex listFish[i].FishIndex.Distinct().ToList();}}return listFish;}/// summary/// 8.鱼像素分组/// /summarypublic static ListFishModel FishGroup(Liststring data){var fish new ListFishModel();//鱼像素分组for (int i 0; i data.Count; i){for (int b 0; b data.Count; b){if (!string.IsNullOrWhiteSpace(data[i]) !string.IsNullOrWhiteSpace(data[b])){var data_i_xy data[i].Split(|);var data_b_xy data[b].Split(|);if (AreAdjacent(Convert.ToInt32(data_i_xy[0]), Convert.ToInt32(data_i_xy[1]), Convert.ToInt32(data_b_xy[0]), Convert.ToInt32(data_b_xy[1])))//相邻的鱼像素合并一组{var entity fish.Where(a a.FishIndex.Contains(data[i]) || a.FishIndex.Contains(data[b])).FirstOrDefault();if (entity ! null){entity.FishIndex.Add(data[i]);entity.FishIndex.Add(data[b]);}else{FishModel model new FishModel();model.FishIndex new Liststring();model.FishIndex.Add(data[i]);model.FishIndex.Add(data[b]);fish.Add(model);}}}}}return fish;}/// summary/// 像素是否相邻/// /summary/// param namex1/param/// param namey1/param/// param namex2/param/// param namey2/param/// returns/returnspublic static bool AreAdjacent(int x1, int y1, int x2, int y2){// 检查x和y坐标之差是否为1这样可以确保像素是直接相邻的return (Math.Abs(x1 - x2) 1 Math.Abs(y1 - y2) 1) !(x1 x2 y1 y2);}/// summary/// 9.每条鱼的像素群寻找中位值作为轨迹坐标/// /summary/// param namelistFish/param/// returns/returnspublic static Liststring FishCenter(ListFishModel listFish){var result new Liststring();if (listFish ! null listFish.Count() 0){for (int i 0; i listFish.Count; i){//取中位值var index -1;if (listFish[i].FishIndex.Count() % 2 0) // 偶数长度{index listFish[i].FishIndex.Count() / 2;}else // 奇数长度{index (listFish[i].FishIndex.Count() 1) / 2;}//这条鱼中心坐标var center listFish[i].FishIndex[index];result.Add(center);}}return result;}/// summary/// 反向二级化/// /summary/// param nameoldpath/param/// param namenewPath/parampublic static void Two_LevelReversal(string oldpath, string newPath){OpenCvSharp.Mat src Cv2.ImRead(oldpath, OpenCvSharp.ImreadModes.Grayscale);OpenCvSharp.Mat dst new OpenCvSharp.Mat();// 反向二值化大于 127 的像素设为 0其他设为 255Cv2.Threshold(src, dst, 135, 255, ThresholdTypes.BinaryInv);Cv2.ImWrite(newPath, dst);}/// summary/// 96孔鱼苗高光二级化处理/// /summary/// param nameoldpath/param/// param namenewPath/parampublic static void Two_LevelHeight(string oldpath, string newPath){Emgu.CV.Mat image CvInvoke.Imread(oldpath, Emgu.CV.CvEnum.ImreadModes.Grayscale);Emgu.CV.Mat mid2 new Emgu.CV.Mat();CvInvoke.Threshold(image, mid2, 180, 255, ThresholdType.Binary);CvInvoke.Imwrite(newPath, mid2);}/// summary/// 斑点检测(用不着)/// /summary/// param namemat图片/param/// param nameresultMat结果图片/param/// returns斑点中心点数据/returnspublic static KeyPoint[] SimpleblobDetector(OpenCvSharp.Mat mat, out OpenCvSharp.Mat resultMat){// 转化为灰度图OpenCvSharp.Mat gray new OpenCvSharp.Mat();Cv2.CvtColor(mat, gray, ColorConversionCodes.BGR2GRAY);// 创建SimpleBlobDetector并设置参数OpenCvSharp.SimpleBlobDetector.Params parameters new OpenCvSharp.SimpleBlobDetector.Params();parameters.BlobColor 0;//斑点的亮度值取值为0或255默认为0表示只检测黑色斑点。parameters.FilterByArea true; // 是否根据斑点的面积进行过滤默认为trueparameters.MinArea 10; // 最小的斑点面积默认为25parameters.MaxArea 6000; // 最大的斑点面积默认为5000// 创建SimpleBlobDetectorOpenCvSharp.SimpleBlobDetector detector OpenCvSharp.SimpleBlobDetector.Create(parameters);// 检测斑点KeyPoint[] keypoints detector.Detect(gray);// 在图像上绘制斑点resultMat new OpenCvSharp.Mat();Cv2.DrawKeypoints(mat, keypoints, resultMat, Scalar.All(-1));return keypoints;}}}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站移动适配怎么做搭建网站需要钱吗

植物大战僵尸修改器PVZTools:3步搞定无限阳光与自动操作 【免费下载链接】pvztools 植物大战僵尸原版 1.0.0.1051 修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztools 还在为植物大战僵尸的关卡难度发愁吗?PVZTools修改器就是你的游戏…

张小明 2026/1/10 7:25:06 网站建设

福州做企业网站网站网站做代理怎么发展下线

Kotaemon与Elasticsearch集成:混合检索方案实现 在企业级智能问答系统日益普及的今天,一个核心挑战始终存在:如何让大模型既“懂行”又“靠谱”?我们见过太多生成流畅但张冠李戴的回答——这正是“幻觉”的代价。尤其在金融、医疗…

张小明 2026/1/10 7:47:56 网站建设

柯林wap建站程序个人版推广引流网站

一、模型架构差异 1.1 分类模型架构 YOLOv8分类模型采用简洁的架构设计,主要包括: 主干网络:基于CSPDarknet,用于特征提取颈部网络:使用C2f模块,进行特征融合分类头:全连接层,输出类…

张小明 2026/1/10 8:13:55 网站建设

j网站开发的相关知识网站建设与推广员岗位职责

呈现层的实战解析与技术选型 1. 呈现层概述 呈现层通常由用户界面和呈现逻辑(也常称为 UI 逻辑)两个主要部分组成。用户界面为用户提供使用应用程序的工具,应用程序的各种功能通过界面中的图形或文本元素展示给用户,这些元素能提供信息、建议操作并捕获用户活动。用户在界…

张小明 2026/1/10 9:43:10 网站建设

最新国际新闻如何优化网站首页代码

Vim编程增强:语法高亮与编译错误检查全攻略 语法高亮基础 Vim允许对不同类型的文本进行颜色和高亮设置。它将文本分为不同的语法组,每个组都有相应的颜色和高亮定义。部分高级语法高亮组如下: | 语法组 | 说明 | 示例 | | ---- | ---- | ---- | | Comment | 特定编程语…

张小明 2026/1/10 9:59:37 网站建设

信阳建设监理协会网站北京做网站的好公司有哪些

轻量化AI革命:ImageGPT-small如何重塑2025图像生成行业格局 【免费下载链接】imagegpt-small 项目地址: https://ai.gitcode.com/hf_mirrors/openai/imagegpt-small 导语 OpenAI开源轻量级图像生成模型ImageGPT-small凭借消费级硬件部署能力与高效生成特性…

张小明 2026/1/10 10:08:18 网站建设