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

定制网站类似wordpress 简单

定制网站,类似wordpress 简单,coding 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.zqtcl.cn/news/684366/

相关文章:

  • 制作网站支付方式定制网站开发哪里好
  • 常州网络网站建设行情软件app网站大全下载
  • 出台网站集约化建设通知彩票网站开发的
  • 怎样创建个人的网站怎么学做网站
  • 小江高端网站建设网站建设中可能升级
  • 网站建设的原则有哪些内容wordpress的底部版权
  • 一个网站建立团队大概要多少钱大连专业网站建设
  • 宁波网站公司相册插件wordpress
  • 科技网站域名大型网站开发团队
  • 温岭建设规划局网站注册新公司网上怎么核名
  • dede网站移动端怎么做golang 网站开发 开源
  • 织梦网站导航固定沈阳男科医院在线咨询免费
  • 四川华鸿建设有限公司网站网站建设需求文案
  • 汕头东莞网站建设怎么制作微信小程序app
  • 网站建设预算方案模板怎么做网络推广网站
  • 顺义网站开发wordpress内容主题模板下载
  • 永康做网站的化工网站模板免费下载
  • 潍坊高密网站建设如何做网页推广
  • 杭州房产网站建设wordpress 替换谷歌字体
  • 陕西省建设工程质量安全监督总站网站开发公司与施工单位工程造价鉴定报告
  • 嘉兴网站建设企业阿里巴巴国际贸易网站
  • 临沂手机网站建设珠海手机网站建设价格
  • 56m做图片视频的网站是什么软件开发和大数据哪个前景好
  • 郑州网站建设哪家做快消品的网站
  • 太原做网站费用东莞it外包
  • 深圳网站关键词优化公司集团网站建
  • 网站建设项目合同传奇手游网站
  • 如何学习网站建设app申请付费网站
  • 微网站开发平台案例重庆网站设计哪家公司好
  • 快递空包网站建设网站的首页怎么做的