Deom.zip
大小:553.04KB
价格:29积分
下载量:0
评分:
5.0
上传者:m0_74094746
更新日期:2025-09-22

使用OpenCV-Python实现灰度化、二值化等基本处理

资源文件列表(大概)

文件名
大小
getProcess.py
2.66KB
Picture/
-
Picture/1.jpg
68.18KB
Picture/2.jpg
66.28KB
Picture/3.jpg
67.79KB
Picture/4.jpg
58.36KB
Picture/5.jpg
48.59KB
Picture/6.jpg
67.17KB
Picture/7.jpg
57.89KB
Picture/8.jpg
62.29KB
Picture/9.jpg
50.09KB
Picture/fdzDtORwQD.jpg
14.85KB

资源内容介绍

对OpenCV、图像处理方法进行简介与操作介绍,实现了对文件夹中每个手写图像进行灰度化、二值化、膨胀和连通组件分析的基本流程并包含了错误处理和文件过滤
#处理一个包含手写图像的文件夹,对每个图像进行灰度化、二值化、膨胀 图像处理操作,# 并使用连通组件分析来识别和标记小于一定面积的区域import cv2 as cv # 导入OpenCV库,并简称为cvimport numpy as np # 导入NumPy库,用于数学运算和数组操作import os # 导入os库,用于处理文件和目录# 设置原始图像文件夹路径 orig_path = r"D:\Blog\work2\Picture"img_list = [f for f in os.listdir(orig_path) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))] # 列出文件夹中所有图像文件的名称# 创建一个3x3的单位矩阵作为膨胀操作的核 kernel = np.ones((3, 3), np.uint8)# 遍历文件夹中的每个图像文件 for img_name in img_list: img_path = os.path.join(orig_path, img_name) # 构建图像的完整路径 img = cv.imread(img_path) # 读取图像 if img is None: # 如果图像读取失败(例如文件不是图像或文件损坏) print(f"Warning: Unable to read image {img_name}") # 打印警告信息 continue # 跳过当前循环迭代,继续下一个图像 img_resize = cv.resize(img, (600, 600)) # 将图像大小调整为600x600 img_gray = cv.cvtColor(img_resize, cv.COLOR_RGB2GRAY) # 将图像转换为灰度图 ret, img_bw = cv.threshold(img_gray, 200, 255, cv.THRESH_BINARY) # 使用固定阈值进行二值化处理 img_open = cv.dilate(img_bw, kernel, iterations=3) # 对二值图像进行3次膨胀操作 #cv.imshow("img_open", img_open) #图像膨胀后 # 使用连通组件分析,找出图像中的所有连通区域及其属性 num_labels, labels, stats, centroids = \ cv.connectedComponentsWithStats(img_open, connectivity=8, ltype=None) # 遍历每个连通区域的统计信息 for i, sta in enumerate(stats): if i == 0: # 忽略背景区域(标签为0的区域) continue if sta[4] < 1000: # 如果区域的面积小于1000像素 # 在原二值膨胀图像上标记该区域(用红色填充) cv.rectangle(img_open, tuple(sta[0:2]), tuple(sta[0:2] + sta[2:4]), (0, 0, 255), thickness=-1) # 展示图像 #cv.imshow("img_resize", img_resize)#原图 #cv.imshow("img_gray", img_gray)#灰度处理后 #cv.imshow("img_bw", img_bw) # 二值处理后 #cv.imshow("img_bw", img_bw) # 二值处理后 cv.imshow("img_open", img_open)#连通后 # 等待用户按键,如果按下'q',则退出循环 if cv.waitKey(0) & 0xFF == ord('q'): break #print("*" * 50) # 打印分割线cv.destroyAllWindows() # 销毁所有OpenCV创建的窗口

用户评论 (0)

发表评论

captcha

相关资源

2. 开发板驱动.zip

2. 开发板驱动.zip

685.99KB43积分

rlcard-showdown-master.zip

rlcard-showdown-master.zip

4.23MB17积分

基于JavaWeb实现的智能化停车场管理系统

系统介绍基于Javaweb实现的在线考试系统采用jsp+serlvet技术实现,学生可登录系统选择试题进行在线考 试,考试完成后自动提交评分。该系统管理员端尚未实现,且学生端也有些BUG,各位小伙伴自行解决,也可进行二次开发。技术选型开发工具:idea2020.3运行环境:jdk1.8+MySQL5.7+Tomcat9(此配置为小白调试所用,仅供参考) 服务端技术:jsp+servlet+jdbc+c3p0+jstl+el前端技术:html+css+jQuery+bootstrap

3.8MB10积分

VC++6.0俄罗斯方块项目是在Microsoft Visual C++6.0环境

VC++6.0俄罗斯方块项目是在Microsoft Visual C++6.0环境中使用C++进行游戏开发的经典示例。它不仅包括基本的单人俄罗斯方块模式,还扩展到有竞争力的双人模式,增强了互动性和乐趣。核心概念和实施细节:1.C++中的面向对象方法:2.该项目广泛使用Game等类来管理游戏流程,Block来表示不同的俄罗斯方块形状,Player来处理用户输入和分数计算。面向对象的原则,如封装、继承和多态性,被用来改善代码结构、清晰度和维护。3.游戏循环动力学:4.游戏循环通常在VC++6.0中用while或for循环实现,在每次迭代中管理关键方面,如块掉落、碰撞检测和用户输入响应。在双人模式下,两个玩家的并发输入处理和块移动需要线程或消息队列等同步技术。5.处理控制台I/O:6.conio.h是一个C语言头文件,它提供了getch()等函数用于非缓冲输入,clrscr()用于清除屏幕。虽然VC++6.0默认支持conio.h,但现代Visual Studio版本可能不支持。因此,为了兼容性,考虑了cin和cout或第三方库等

2.22MB25积分