mirror of
https://github.com/NanjingForestryUniversity/supermachine--tomato-passion_fruit.git
synced 2025-11-08 14:24:00 +00:00
575 lines
19 KiB
Plaintext
575 lines
19 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "initial_id",
|
||
"metadata": {
|
||
"collapsed": true,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T07:45:52.076766Z",
|
||
"start_time": "2024-03-18T07:45:52.061770Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"import cv2\n",
|
||
"import numpy as np\n",
|
||
"import os"
|
||
],
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 44,
|
||
"source": [
|
||
"#读取图片\n",
|
||
"img = cv2.imread('datas/39.tiff')\n",
|
||
"hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n",
|
||
"cv2.imshow('HSV', hsv)\n",
|
||
"lower_red = np.array([10, 70, 70])\n",
|
||
"upper_red = np.array([255, 255, 255])\n",
|
||
"mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,\n",
|
||
"#保存\n",
|
||
"cv2.imwrite('result/39.tiff', mask)"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2023-11-20T12:33:25.384530Z",
|
||
"start_time": "2023-11-20T12:33:25.353136100Z"
|
||
}
|
||
},
|
||
"id": "eba7a5b467780310",
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 56,
|
||
"source": [
|
||
"import cv2\n",
|
||
"import numpy as np\n",
|
||
"from matplotlib import pyplot as plt\n",
|
||
"\n",
|
||
"#通过OpenCV读取图片信息\n",
|
||
"img = cv2.imread('data/1.tiff')\n",
|
||
"# BGR图转为HSV\n",
|
||
"hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n",
|
||
"# 提取hsv中H通道数据\n",
|
||
"h = hsv[:, :, 0].ravel()\n",
|
||
"# 直方图显示\n",
|
||
"plt.hist(h, 180, [0, 180])\n",
|
||
"plt.show()\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T08:31:54.546425Z",
|
||
"start_time": "2024-03-18T08:31:54.363728Z"
|
||
}
|
||
},
|
||
"id": "14abba9e7d1d9496",
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"source": [
|
||
"#亮度增强\n",
|
||
"from PIL import Image, ImageEnhance\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"# 打开图像\n",
|
||
"image = Image.open('data/new/yellow/1.tiff')\n",
|
||
"\n",
|
||
"# 亮度增强\n",
|
||
"enhancer = ImageEnhance.Brightness(image)\n",
|
||
"enhanced_image = enhancer.enhance(3) # 可以尝试不同的值以找到最佳效果\n",
|
||
"\n",
|
||
"# 显示图像\n",
|
||
"plt.imshow(enhanced_image)\n",
|
||
"plt.axis('off') # 关闭坐标轴\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"# 如有需要,保存增强后的图像\n",
|
||
"enhanced_image.save('enhanced_image.png')\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T15:43:17.592593Z",
|
||
"start_time": "2024-03-18T15:43:17.520589Z"
|
||
}
|
||
},
|
||
"id": "4bde773e19fd521e",
|
||
"execution_count": 77,
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 78,
|
||
"source": [
|
||
"import cv2\n",
|
||
"import numpy as np\n",
|
||
"\n",
|
||
"#通过OpenCV读取图片信息\n",
|
||
"img = cv2.imread('enhanced_image.png')\n",
|
||
"hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n",
|
||
"cv2.imshow(\"img\", img)\n",
|
||
"\n",
|
||
"# HSV 的下界限\n",
|
||
"lower_red = np.array([133,50,50])\n",
|
||
"# HSV 的上界限\n",
|
||
"upper_red = np.array([179,255,255])\n",
|
||
"\n",
|
||
"# 通过上下限提取范围内的掩模mask\n",
|
||
"mask = cv2.inRange(hsv, lower_red, upper_red)\n",
|
||
"cv2.imshow(\"mask\", mask)\n",
|
||
"\n",
|
||
"# 腐蚀与膨胀处理\n",
|
||
"# 定义\n",
|
||
"kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(2, 2))#定义结构元素的形状和大小\n",
|
||
"\n",
|
||
"openingmask = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel) # 闭运算\n",
|
||
"openingmask1 = cv2.morphologyEx(openingmask, cv2.MORPH_OPEN,kernel) # 开运算\n",
|
||
"cv2.imshow('mask',openingmask)\n",
|
||
"cv2.imshow('mask1',openingmask1)\n",
|
||
"\n",
|
||
"cv2.waitKey(0)\n",
|
||
"cv2.destroyAllWindows()\n",
|
||
"\n",
|
||
"\n",
|
||
"# 找出所有白色连通区域\n",
|
||
"num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(openingmask1, 4, cv2.CV_32S)\n",
|
||
"\n",
|
||
"# 遍历所有连通区域,移除面积小于特定阈值的区域\n",
|
||
"area_threshold = 10 # 可以根据实际情况调整阈值大小\n",
|
||
"for i in range(1, num_labels): # 标签0是背景\n",
|
||
" if stats[i, cv2.CC_STAT_AREA] < area_threshold:\n",
|
||
" openingmask1[labels == i] = 0\n",
|
||
"\n",
|
||
"# 保存和显示处理后的掩膜\n",
|
||
"cv2.imwrite('cleaned_mask.png', openingmask1)\n",
|
||
"cv2.imshow('Cleaned Mask', openingmask1)\n",
|
||
"cv2.waitKey(0)\n",
|
||
"cv2.destroyAllWindows()\n",
|
||
"\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T15:43:25.341649Z",
|
||
"start_time": "2024-03-18T15:43:19.273376Z"
|
||
}
|
||
},
|
||
"id": "a6e663957af72d33",
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"source": [],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T10:43:49.218155Z",
|
||
"start_time": "2024-03-18T10:43:26.620748Z"
|
||
}
|
||
},
|
||
"id": "7264359547e5d56f",
|
||
"execution_count": 25,
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"source": [
|
||
"#白色颜色带处理\n",
|
||
"\n",
|
||
"import cv2\n",
|
||
"import numpy as np\n",
|
||
"\n",
|
||
"# 加载图像\n",
|
||
"mask_path = 'mask1/new/empty/yellow/mask_1.png'\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# 边缘去除函数\n",
|
||
"def remove_edge_bands(mask, edge_threshold=10):\n",
|
||
" h, w = mask.shape[:2]\n",
|
||
"\n",
|
||
" # 去除上下边缘区域\n",
|
||
" mask[:edge_threshold, :] = 0\n",
|
||
" mask[h-edge_threshold:, :] = 0\n",
|
||
"\n",
|
||
" return mask\n",
|
||
"\n",
|
||
"# 应用边缘去除\n",
|
||
"cleaned_mask = remove_edge_bands(mask)\n",
|
||
"\n",
|
||
"# 保存处理后的图像\n",
|
||
"output_path = '测试.png'\n",
|
||
"cv2.imwrite(output_path, cleaned_mask)\n",
|
||
"# 显示处理后的图像\n",
|
||
"cv2.imshow('Cleaned Mask ', cleaned_mask)\n",
|
||
"\n",
|
||
"cv2.waitKey(0)\n",
|
||
"cv2.destroyAllWindows()\n",
|
||
"\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T16:11:08.430381Z",
|
||
"start_time": "2024-03-18T16:11:04.710701Z"
|
||
}
|
||
},
|
||
"id": "9eedb7f708e43473",
|
||
"execution_count": 95,
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"source": [
|
||
"#实现利用hsv空间进行阈值分割,要求hsv三个值做成滑动轴可拖动的实时显示当前阈值分割效果,并且显示当前hsv三个的具体值,\n",
|
||
"\n",
|
||
"import cv2\n",
|
||
"import numpy as np\n",
|
||
"\n",
|
||
"def nothing(x):\n",
|
||
" pass\n",
|
||
"\n",
|
||
"# 创建一个窗口\n",
|
||
"cv2.namedWindow('HSV Thresholding')\n",
|
||
"\n",
|
||
"# 创建滑动条,用于调整HSV阈值\n",
|
||
"cv2.createTrackbar('H Lower', 'HSV Thresholding', 0, 179, nothing)\n",
|
||
"cv2.createTrackbar('H Upper', 'HSV Thresholding', 179, 179, nothing)\n",
|
||
"cv2.createTrackbar('S Lower', 'HSV Thresholding', 0, 255, nothing)\n",
|
||
"cv2.createTrackbar('S Upper', 'HSV Thresholding', 255, 255, nothing)\n",
|
||
"cv2.createTrackbar('V Lower', 'HSV Thresholding', 0, 255, nothing)\n",
|
||
"cv2.createTrackbar('V Upper', 'HSV Thresholding', 255, 255, nothing)\n",
|
||
"\n",
|
||
"# 读取图像\n",
|
||
"image = cv2.imread('enhanced_image.png')\n",
|
||
"\n",
|
||
"# 将BGR图像转换为HSV\n",
|
||
"hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)\n",
|
||
"\n",
|
||
"while True:\n",
|
||
" # 获取滑动条的当前位置\n",
|
||
" h_lower = cv2.getTrackbarPos('H Lower', 'HSV Thresholding')\n",
|
||
" h_upper = cv2.getTrackbarPos('H Upper', 'HSV Thresholding')\n",
|
||
" s_lower = cv2.getTrackbarPos('S Lower', 'HSV Thresholding')\n",
|
||
" s_upper = cv2.getTrackbarPos('S Upper', 'HSV Thresholding')\n",
|
||
" v_lower = cv2.getTrackbarPos('V Lower', 'HSV Thresholding')\n",
|
||
" v_upper = cv2.getTrackbarPos('V Upper', 'HSV Thresholding')\n",
|
||
"\n",
|
||
" # 创建HSV阈值掩膜\n",
|
||
" lower_bound = np.array([h_lower, s_lower, v_lower])\n",
|
||
" upper_bound = np.array([h_upper, s_upper, v_upper])\n",
|
||
" mask = cv2.inRange(hsv, lower_bound, upper_bound)\n",
|
||
"\n",
|
||
" # 对图像应用掩膜以获取结果\n",
|
||
" result = cv2.bitwise_and(image, image, mask=mask)\n",
|
||
"\n",
|
||
" # 显示图像\n",
|
||
" cv2.imshow('HSV Thresholding', result)\n",
|
||
"\n",
|
||
" # 打印当前HSV阈值\n",
|
||
" print(f\"H: ({h_lower}, {h_upper}), S: ({s_lower}, {s_upper}), V: ({v_lower}, {v_upper})\")\n",
|
||
"\n",
|
||
" # 按'q'键退出循环\n",
|
||
" if cv2.waitKey(1) & 0xFF == ord('q'):\n",
|
||
" break\n",
|
||
"\n",
|
||
"# 销毁所有窗口\n",
|
||
"cv2.destroyAllWindows()\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T15:39:44.463493Z",
|
||
"start_time": "2024-03-18T15:39:40.005484Z"
|
||
}
|
||
},
|
||
"id": "a42269b65f848794",
|
||
"execution_count": 70,
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"source": [
|
||
"##循环提取mask\n",
|
||
"\n",
|
||
"# 指定文件夹路径\n",
|
||
"folder_path = 'tcimage' # 替换成你的文件夹路径\n",
|
||
"\n",
|
||
"# 获取文件夹中的所有文件\n",
|
||
"files = os.listdir(folder_path)\n",
|
||
"\n",
|
||
"for file_name in files:\n",
|
||
" file_path = os.path.join(folder_path,file_name)\n",
|
||
"\n",
|
||
" img = cv2.imread(file_path)\n",
|
||
" \n",
|
||
" hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n",
|
||
"\n",
|
||
" # cv2.imshow(\"img\", img)\n",
|
||
"\n",
|
||
" # HSV 的下界限\n",
|
||
" lower_red = np.array([160,70,15])\n",
|
||
" # HSV 的上界限\n",
|
||
" upper_red = np.array([179,255,255])\n",
|
||
"\n",
|
||
" # 通过上下限提取范围内的掩模mask\n",
|
||
" mask = cv2.inRange(hsv, lower_red, upper_red)\n",
|
||
" # cv2.imshow(\"mask\", mask)\n",
|
||
" \n",
|
||
" # 腐蚀与膨胀处理\n",
|
||
" \n",
|
||
" kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3, 3))#定义结构元素的形状和大小\n",
|
||
" openingmask = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel) # 闭运算\n",
|
||
" openingmask1 = cv2.morphologyEx(openingmask, cv2.MORPH_OPEN,kernel) # 开运算\n",
|
||
" \n",
|
||
" # cv2.imshow('mask',openingmask)\n",
|
||
" # cv2.imshow('mask1',openingmask1)\n",
|
||
" # \n",
|
||
" # cv2.waitKey(0)\n",
|
||
" # cv2.destroyAllWindows()\n",
|
||
"\n",
|
||
" Img_Name = \"./mask/\" + file_name \n",
|
||
" cv2.imwrite(Img_Name, openingmask1)\n",
|
||
"\n"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T08:14:58.545492Z",
|
||
"start_time": "2024-03-18T08:14:58.534491Z"
|
||
}
|
||
},
|
||
"id": "3665c0b573adb358",
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 57,
|
||
"source": [
|
||
" #先增强图像亮度,然后循环提取并保存mask(20240318版无锡透射百香果)ps:目前参数适用于old文件夹内图像,new文件夹内图像需要调整参数\n",
|
||
"\n",
|
||
"import cv2\n",
|
||
"import numpy as np\n",
|
||
"import os\n",
|
||
"from PIL import Image, ImageEnhance\n",
|
||
"\n",
|
||
"# 消除边缘区域条状白色色带,实现仅包含中心果子区域为白色目标区域\n",
|
||
"# 边缘去除函数\n",
|
||
"def remove_edge_bands(mask, edge_threshold=8):\n",
|
||
" h, w = mask.shape[:2]\n",
|
||
"\n",
|
||
" # 去除上下边缘区域\n",
|
||
" mask[:edge_threshold+6, :] = 0\n",
|
||
" mask[h-edge_threshold:, :] = 0\n",
|
||
"\n",
|
||
" return mask\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# 设定输入和输出文件夹路径\n",
|
||
"input_folder_path = 'data/new/green' # 替换为tiff图像的文件夹路径\n",
|
||
"output_folder_path = 'mask/new/green' # 替换为保存mask的文件夹路径\n",
|
||
"\n",
|
||
"# 检查输出文件夹是否存在,如果不存在就创建它\n",
|
||
"if not os.path.exists(output_folder_path):\n",
|
||
" os.makedirs(output_folder_path)\n",
|
||
"\n",
|
||
"# 遍历指定文件夹内的所有tiff文件\n",
|
||
"for file_name in os.listdir(input_folder_path):\n",
|
||
" if file_name.endswith('.tiff'):\n",
|
||
" # 构建完整的文件路径\n",
|
||
" file_path = os.path.join(input_folder_path, file_name)\n",
|
||
"\n",
|
||
" # 打开并增强图像亮度\n",
|
||
" image = Image.open(file_path)\n",
|
||
" enhancer = ImageEnhance.Brightness(image)\n",
|
||
" enhanced_image = enhancer.enhance(3.5) # 增强亮度\n",
|
||
" \n",
|
||
" # 将PIL图像转换为opencv图像\n",
|
||
" img = np.array(enhanced_image)\n",
|
||
" img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)\n",
|
||
"\n",
|
||
" # 转换到HSV空间\n",
|
||
" hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n",
|
||
"\n",
|
||
" # 设置HSV阈值\n",
|
||
" lower_red = np.array([133, 40, 43])\n",
|
||
" upper_red = np.array([179, 255, 255])\n",
|
||
"\n",
|
||
" # 提取掩膜\n",
|
||
" mask = cv2.inRange(hsv, lower_red, upper_red)\n",
|
||
"\n",
|
||
" # 腐蚀与膨胀处理\n",
|
||
" kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (2, 2))\n",
|
||
" openingmask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 闭运算\n",
|
||
" openingmask1 = cv2.morphologyEx(openingmask, cv2.MORPH_OPEN, kernel) # 开运算\n",
|
||
"\n",
|
||
" # 连通区域处理\n",
|
||
" num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(openingmask1, 4, cv2.CV_32S)\n",
|
||
" area_threshold = 30\n",
|
||
" for i in range(1, num_labels): # 标签0是背景\n",
|
||
" if stats[i, cv2.CC_STAT_AREA] < area_threshold:\n",
|
||
" openingmask1[labels == i] = 0\n",
|
||
" \n",
|
||
" # 应用边缘去除\n",
|
||
" cleaned_mask = remove_edge_bands(openingmask1)\n",
|
||
" \n",
|
||
" # 生成输出文件名和路径\n",
|
||
" output_file_name = 'mask_' + os.path.splitext(file_name)[0] + '.png'\n",
|
||
" output_file_path = os.path.join(output_folder_path, output_file_name)\n",
|
||
"\n",
|
||
" # 保存处理后的掩膜\n",
|
||
" cv2.imwrite(output_file_path, cleaned_mask)\n",
|
||
"\n",
|
||
"print(\"处理完成,掩膜图像已保存到指定文件夹。\")\n",
|
||
"\n",
|
||
"###原条光黄果p110顶端少1像素宽度图像,原因在于后续图像过窄,目前参数已是最优解,选择手动替换p110"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T12:15:14.697171Z",
|
||
"start_time": "2024-03-18T12:15:14.164074Z"
|
||
}
|
||
},
|
||
"id": "ab7f303dfa7d8a27",
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"source": [
|
||
" #先增强图像亮度,然后循环提取并保存mask(20240318版无锡透射百香果)ps:new文件夹内\n",
|
||
"\n",
|
||
"import cv2\n",
|
||
"import numpy as np\n",
|
||
"import os\n",
|
||
"from PIL import Image, ImageEnhance\n",
|
||
"\n",
|
||
"# 消除边缘区域条状白色色带,实现仅包含中心果子区域为白色目标区域\n",
|
||
"# 边缘去除函数\n",
|
||
"def remove_edge_bands(mask, edge_threshold=2):\n",
|
||
" h, w = mask.shape[:2]\n",
|
||
"\n",
|
||
" # 去除上下边缘区域\n",
|
||
" mask[:edge_threshold+18, :] = 0\n",
|
||
" mask[h-edge_threshold:, :] = 0\n",
|
||
"\n",
|
||
" return mask\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# 设定输入和输出文件夹路径\n",
|
||
"input_folder_path = 'data/new/yellow' # 替换为tiff图像的文件夹路径\n",
|
||
"output_folder_path = 'mask/new/yellow' # 替换为保存mask的文件夹路径\n",
|
||
"\n",
|
||
"# 检查输出文件夹是否存在,如果不存在就创建它\n",
|
||
"if not os.path.exists(output_folder_path):\n",
|
||
" os.makedirs(output_folder_path)\n",
|
||
"\n",
|
||
"# 遍历指定文件夹内的所有tiff文件\n",
|
||
"for file_name in os.listdir(input_folder_path):\n",
|
||
" if file_name.endswith('.tiff'):\n",
|
||
" # 构建完整的文件路径\n",
|
||
" file_path = os.path.join(input_folder_path, file_name)\n",
|
||
"\n",
|
||
" # 打开并增强图像亮度\n",
|
||
" image = Image.open(file_path)\n",
|
||
" enhancer = ImageEnhance.Brightness(image)\n",
|
||
" enhanced_image = enhancer.enhance(3) # 增强亮度\n",
|
||
" \n",
|
||
" # 将PIL图像转换为opencv图像\n",
|
||
" img = np.array(enhanced_image)\n",
|
||
" img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)\n",
|
||
"\n",
|
||
" # 转换到HSV空间\n",
|
||
" hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n",
|
||
"\n",
|
||
" # 设置HSV阈值\n",
|
||
" lower_red = np.array([133, 50, 50])\n",
|
||
" upper_red = np.array([179, 255, 255])\n",
|
||
"\n",
|
||
" # 提取掩膜\n",
|
||
" mask = cv2.inRange(hsv, lower_red, upper_red)\n",
|
||
"\n",
|
||
" # 腐蚀与膨胀处理\n",
|
||
" kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (2, 2))\n",
|
||
" openingmask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 闭运算\n",
|
||
" openingmask1 = cv2.morphologyEx(openingmask, cv2.MORPH_OPEN, kernel) # 开运算\n",
|
||
"\n",
|
||
" # 连通区域处理\n",
|
||
" num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(openingmask1, 4, cv2.CV_32S)\n",
|
||
" area_threshold = 30\n",
|
||
" for i in range(1, num_labels): # 标签0是背景\n",
|
||
" if stats[i, cv2.CC_STAT_AREA] < area_threshold:\n",
|
||
" openingmask1[labels == i] = 0\n",
|
||
" \n",
|
||
" # 应用边缘去除\n",
|
||
" cleaned_mask = remove_edge_bands(openingmask1)\n",
|
||
" \n",
|
||
" # 生成输出文件名和路径\n",
|
||
" output_file_name = 'mask_' + os.path.splitext(file_name)[0] + '.png'\n",
|
||
" output_file_path = os.path.join(output_folder_path, output_file_name)\n",
|
||
"\n",
|
||
" # 保存处理后的掩膜\n",
|
||
" cv2.imwrite(output_file_path, cleaned_mask)\n",
|
||
"\n",
|
||
"print(\"处理完成,掩膜图像已保存到指定文件夹。\")\n",
|
||
"\n",
|
||
"###new当前参数黄果p62顶部白色区域过大,当前参数下其他图像效果较好,选择手动替换p62,针对new下的yellow和green此时边缘参数宽度为5,上边缘+7,下边缘+5\n",
|
||
"###对于new下empty内的yellow,边缘参数宽度为2,上边缘+3,下边缘+2,P1和p30效果不好,p1上边缘没有去除干净,p30上边缘去除过多,选择手动替换"
|
||
],
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"ExecuteTime": {
|
||
"end_time": "2024-03-18T16:14:54.187480Z",
|
||
"start_time": "2024-03-18T16:14:53.736931Z"
|
||
}
|
||
},
|
||
"id": "6afa206f04690497",
|
||
"execution_count": 101,
|
||
"outputs": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"source": [],
|
||
"metadata": {
|
||
"collapsed": false
|
||
},
|
||
"id": "bc021fb45388a2b3",
|
||
"execution_count": null,
|
||
"outputs": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 2
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython2",
|
||
"version": "2.7.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|