当前位置: 首页 > news >正文

网站推荐2021怎么制作自己的免费网站

网站推荐2021,怎么制作自己的免费网站,登录可见wordpress,长沙做网站设计文章目录 概要实例一#xff1a;硬币分割计数实例二#xff1a;玉米粒分割计数 概要 在当今数字图像处理领域#xff0c;图像分割技术是一项至关重要的任务。图像分割旨在将图像中的不同目标或区域准确地分开#xff0c;为计算机视觉、图像识别和机器学习等领域提供了坚实… 文章目录 概要实例一硬币分割计数实例二玉米粒分割计数 概要 在当今数字图像处理领域图像分割技术是一项至关重要的任务。图像分割旨在将图像中的不同目标或区域准确地分开为计算机视觉、图像识别和机器学习等领域提供了坚实的基础。在图像分割的广泛应用中二值化、形态学预处理、距离变换以及分水岭算法等技术被广泛探讨和应用。 首先二值化技术通过将灰度图像转化为黑白图像为分割算法提供了清晰的背景和前景。其次形态学预处理通过腐蚀、膨胀等操作清除噪声、连接物体为后续处理提供了更加准确的图像。接着距离变换技术能够量化地描述图像中各个像素点与目标的距离关系为图像分析提供了重要依据。最后分水岭算法则是一种高度智能的分割技术通过模拟水流形成分割边界解决了复杂目标重叠和交叉的挑战。 实例一硬币分割计数 导入必要的库 from skimage.feature import peak_local_max from skimage.morphology import watershed from scipy import ndimage import numpy as np import argparse import imutils import cv2加载并预处理图像 image cv2.imread(1.jpg) shifted cv2.pyrMeanShiftFiltering(image, 21, 51) cv2.imshow(Input, image)这里使用了均值迁移滤波Mean Shift Filtering来平滑图像使得图像中的区域更加集中有助于后续的阈值处理。 将图像转换为灰度图然后进行二值化处理 gray cv2.cvtColor(shifted, cv2.COLOR_BGR2GRAY) thresh cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] cv2.imshow(Thresh, thresh)这里使用了Otsu的阈值处理方法将灰度图转换为二值图。 计算距离变换并找到峰值 D ndimage.distance_transform_edt(thresh) localMax peak_local_max(D, indicesFalse, min_distance10, labelsthresh)这一步计算了二值化图像的距离变换Euclidean Distance Transform然后找到了距离图中的峰值点。 应用分水岭算法进行图像分割 markers ndimage.label(localMax, structurenp.ones((3, 3)))[0] labels watershed(-D, markers, maskthresh)这里使用了分水岭算法通过标记markers和掩码mask将图像分割成不同的区域。 分割结果的后处理 for label in np.unique(labels):# if the label is zero, we are examining the background# so simply ignore itif label 0:continue# otherwise, allocate memory for the label region and draw# it on the maskmask np.zeros(gray.shape, dtypeuint8)mask[labels label] 255# detect contours in the mask and grab the largest onecnts cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)cnts imutils.grab_contours(cnts)c max(cnts, keycv2.contourArea)# draw a circle enclosing the object((x, y), r) cv2.minEnclosingCircle(c)cv2.circle(image, (int(x), int(y)), int(r), (0, 255, 0), 2)cv2.putText(image, {}.format(label), (int(x) - 10, int(y)),cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)在这个循环中对分水岭算法得到的每个区域进行处理找到每个区域的轮廓然后用圆圈标注出物体的轮廓并在标注中显示区域的标签。 显示最终的分割结果 cv2.imshow(Output, image)cv2.waitKey(0)cv2.destroyAllWindows()最终代码将显示带有分割结果的原始图像。这段代码演示了一个完整的图像分割流程包括图像预处理、距离变换、分水岭算法的应用以及对分割结果的后处理和可视化。 全部代码 # import the necessary packages from skimage.feature import peak_local_max from scipy import ndimage import numpy as np import argparse import imutils import cv2 from skimage.morphology import watershed # load the image and perform pyramid mean shift filtering # to aid the thresholding step image cv2.imread(img.png) shifted cv2.pyrMeanShiftFiltering(image, 21, 51) cv2.imshow(Input, image)# convert the mean shift image to grayscale, then apply # Otsus thresholding gray cv2.cvtColor(shifted, cv2.COLOR_BGR2GRAY) thresh cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] cv2.imshow(Thresh, thresh)# compute the exact Euclidean distance from every binary # pixel to the nearest zero pixel, then find peaks in this # distance map D ndimage.distance_transform_edt(thresh) localMax peak_local_max(D, indicesFalse, min_distance10,labelsthresh)# perform a connected component analysis on the local peaks, # using 8-connectivity, then appy the Watershed algorithm markers ndimage.label(localMax, structurenp.ones((3, 3)))[0] labels watershed(-D, markers, maskthresh) print([INFO] {} unique segments found.format(len(np.unique(labels)) - 1))# loop over the unique labels returned by the Watershed # algorithm for label in np.unique(labels):# if the label is zero, we are examining the background# so simply ignore itif label 0:continue# otherwise, allocate memory for the label region and draw# it on the maskmask np.zeros(gray.shape, dtypeuint8)mask[labels label] 255# detect contours in the mask and grab the largest onecnts cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)cnts imutils.grab_contours(cnts)c max(cnts, keycv2.contourArea)# draw a circle enclosing the object((x, y), r) cv2.minEnclosingCircle(c)cv2.circle(image, (int(x), int(y)), int(r), (0, 255, 0), 2)cv2.putText(image, {}.format(label), (int(x) - 10, int(y)),cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)# show the output image cv2.imshow(Output, image) cv2.waitKey(0) cv2.destroyAllWindows()使用时候将图片放在同级目录修改文件名字即可 img.png,11行修改即可。 硬币图片自己随便找复制图像截屏使用都可以 使用结果 三张图片 注意 导入库函数的部分这个skimage库函数的没有需要下载全部名字。 在环境下载库函数 pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple如果导入成功但是运行报错 D:\anaconda\envs\yolov5\python.exe E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\光流\11.py Traceback (most recent call last):File E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\光流\11.py, line 26, in modulelocalMax peak_local_max(D, indicesFalse, min_distance10, TypeError: peak_local_max() got an unexpected keyword argument indicesProcess finished with exit code 1说明使用的peak_local_max函数的参数中含有indices但该函数在较新的版本中已经没有该参数了。 这可能是由于scikit-image库版本过高导致的。检查scikit-image库版本是否为0.17.2或更高版本如果是可以将该库回退到0.16.2版本 pip install scikit-image0.16.2 -i https://pypi.tuna.tsinghua.edu.cn/simple如果依然想要使用最新的scikit-image库将indices参数删除并改用默认值即可例如 localMax peak_local_max(D, min_distance10,threshold_absthreshold)这样可以避免indices参数引起的错误。 实例二玉米粒分割计数 导入必要的库 import numpy as np import cv2 from matplotlib import pyplot as plt读取图像并进行灰度化处理 img cv2.imread(5.jpg) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)二值化处理 ret, thresh cv2.threshold(gray, 245, 255, cv2.THRESH_BINARY)这一步将灰度图像转换为二值图像其中灰度值大于等于245的像素被设为255白色小于245的像素被设为0黑色。 图像膨胀 k cv2.getStructuringElement(cv2.MORPH_RECT, (13, 13)) dilate cv2.dilate(thresh, k, iterations3)通过膨胀操作将二值图像中的物体区域扩大便于后续处理。 距离变换 cv2.bitwise_not(dilate, dilate) dist_transform cv2.distanceTransform(dilate, cv2.DIST_L2, 3) dist cv2.normalize(dist_transform, dist_transform, 0, 1.0, cv2.NORM_MINMAX)这一步计算了图像中每个像素点到最近的背景像素的距离得到了距离变换图。在这个图像中物体的中心部分距离背景较远而边缘部分距离背景较近。 二值化距离变换图 dist cv2.convertScaleAbs(dist) ret2, morph cv2.threshold(dist, 0.99, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU)这一步将距离变换图二值化得到了分割后的图像。 形态学开运算 k2 cv2.getStructuringElement(cv2.MORPH_RECT, (11, 5)) sure_fg cv2.morphologyEx(morph, cv2.MORPH_OPEN, k2, iterations1)这一步通过形态学开运算去除小的噪点保留大的物体区域。 寻找轮廓并标注 thresh, contours, hierarchy cv2.findContours(sure_fg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for i in range(0, len(contours)):(x, y, w, h) cv2.boundingRect(contours[i])cv2.circle(img, (x int(w / 2), y int(h / 2)), 20, (0, 0, 255), -1, cv2.LINE_AA)cv2.putText(img, str(i 1), (x int(w / 2) - 15, y int(h / 2) 5), font, 0.8, (0, 255, 0), 2)这一步使用cv2.findContours函数找到图像中的轮廓然后绘制圆圈和文本标注在图像上表示找到的物体区域。 显示和保存结果 cv2.imshow(img, img) cv2.waitKey(0) cv2.destroyAllWindows()最后通过cv2.imshow显示处理后的图像。 全部代码 import numpy as np import cv2 from matplotlib import pyplot as pltfont cv2.FONT_HERSHEY_SIMPLEXimg cv2.imread(img_2.png) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh cv2.threshold(gray, 245, 255, cv2.THRESH_BINARY) cv2.imshow(threshold, thresh)k cv2.getStructuringElement(cv2.MORPH_RECT, (13, 13)) dilate cv2.dilate(thresh, k, iterations3) cv2.imshow(dilate, dilate)cv2.bitwise_not(dilate, dilate) dist_transform cv2.distanceTransform(dilate, cv2.DIST_L2, 3) dist cv2.normalize(dist_transform, dist_transform, 0, 1.0, cv2.NORM_MINMAX) cv2.imshow(distance, dist) cv2.imwrite(dis.jpg, dist)# dist np.uint8(dist) dist cv2.convertScaleAbs(dist) ret2, morph cv2.threshold(dist, 0.99, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) # ret2, morph cv2.threshold(dist,0,255,cv2.THRESH_BINARY_INV) cv2.imshow(morph, morph)k2 cv2.getStructuringElement(cv2.MORPH_RECT, (11, 5)) sure_fg cv2.morphologyEx(morph, cv2.MORPH_OPEN, k2, iterations1) # 形态开运算cv2.imshow(result, sure_fg)thresh, contours, hierarchy cv2.findContours(sure_fg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for i in range(0, len(contours)):(x, y, w, h) cv2.boundingRect(contours[i])# cv2.drawContours(img,contours,i,(0,255,0),5)cv2.circle(img, (x int(w / 2), y int(h / 2)), 20, (0, 0, 255), -1, cv2.LINE_AA)cv2.putText(img, str(i 1), (x int(w / 2) - 15, y int(h / 2) 5), font, 0.8, (0, 255, 0), 2)cv2.imshow(img, img) cv2.waitKey(0) cv2.destroyAllWindows() 原图 结果 opencv版本不适配可能报错 D:\anaconda\envs\yolov5\python.exe E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\光流\22.py Traceback (most recent call last):File E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\光流\22.py, line 33, in modulethresh, contours, hierarchy cv2.findContours(sure_fg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ValueError: not enough values to unpack (expected 3, got 2)Process finished with exit code 1 解决办法 降低版本参考 降低版本参考 替换 contours, _ cv2.findContours(sure_fg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)替换
http://www.dnsts.com.cn/news/33937.html

相关文章:

  • 网站建设指导方案建设电子商务网站期末考试
  • 食品 药品 监督 网站 源码 phplogo定制免费
  • 国外做设计的网站广州四楚seo顾问
  • 用齐博cms建网站个人网站名称怎么取容易备案
  • 黄的网站建设岳阳市住房和城乡建设路网站
  • 前后端分离实现网站开发网站建设公司哪家好 都来磐石网络
  • 学校网站规划方案石家庄网络公司哪家好
  • 哪个网站可以做试卷做百度网站
  • wordpress幻灯片回收站在哪里wordpress 规则
  • 建设银行开县支行 网站网站建设与用户体验
  • 短网址生成网站vps如何wordpress
  • 在网站做推广属于广告费吗网站建设应该考虑哪些方面
  • 怎么做网站推销产品sem是什么仪器
  • 内网代理ip建设网站在线购物商城网站
  • 网站备案有时间吗wordpress编辑器字体大小
  • 河南省住房和城乡建设厅网站甘孜商城网站建设
  • 移动网站开发教学大纲做电焊加工的网站
  • 商城网站数据库表关系设计现在都用什么软件做网站
  • 如何给网站开发挂国外优秀vi设计网站
  • 网站你懂我意思正能量免费软件推广业务
  • 帝国cms做淘宝客网站xsl做书店网站
  • 互动 网站建设网页制作专业怎么选
  • 建设农场网站两学一做网上答题网站
  • 福建省建设工程质量安全网站网站建设方案 安全
  • 怎样做分销网站wordpress汉化音乐主题
  • 网站建设的原则和目标足球比赛直播app下载
  • 徐州商城建站系统怎么找上海网站建设
  • 网站建设四个阶段巴西网站后缀
  • 邯郸网站优化公司网站用词精准性
  • 上海网站建设公司招人公司建网站流程