supermachine--tomato-passio.../spectrum/03mask.ipynb

790 lines
54 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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"
}
},
"outputs": [],
"source": [
"import cv2\n",
"import numpy as np\n",
"import os"
]
},
{
"cell_type": "code",
"execution_count": 44,
"outputs": [
{
"data": {
"text/plain": "True"
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"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"
},
{
"cell_type": "code",
"execution_count": 56,
"outputs": [
{
"data": {
"text/plain": "<Figure size 640x480 with 1 Axes>",
"image/png": "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enV7TBMAAHRA7RqE1qxZo2effVZXXnll1PoHHnhAb731lpYuXaoVK1Zo165duuWWW7zxY8eOKScnR0eOHNGqVav04osv6oUXXtCsWbO8mm3btiknJ0c//OEPVVtbq2nTpunuu+/We++959UsXrxYRUVFmj17ttatW6cRI0YoOztbu3fvbs9pAwCAjsLayf79++2SSy6xiooK+/73v29Tp041M7OGhgbr1q2bLV261Kv95JNPTJJVVVWZmdnbb79t8fHxFgwGvZqFCxea3++3xsZGMzN76KGHbNiwYVH7HD9+vGVnZ3uPR48ebYWFhd7jY8eOWWpqqpWUlJzRHEKhkEmyUCjUusmfobTiMksrLmuXbQMAYoff77HVmvfvdjsjVFhYqJycHGVlZUWtr6mpUVNTU9T6oUOHatCgQaqqqpIkVVVVafjw4UpJSfFqsrOzFQ6HtXnzZq/mxG1nZ2d72zhy5IhqamqiauLj45WVleXVnKixsVHhcDhqAQAAnVfX9tjoq6++qnXr1mnNmjUtxoLBoBISEpScnBy1PiUlRcFg0Ks5PgQ1jzePnaomHA7r66+/1r59+3Ts2LGT1nz66acn7bukpEQPP/zwmU8UAAB0aG1+RmjHjh2aOnWqXn75ZSUmJrb15tvVjBkzFAqFvGXHjh2xbgkAALSjNg9CNTU12r17t6655hp17dpVXbt21YoVKzR//nx17dpVKSkpOnLkiBoaGqKeV19fr0AgIEkKBAIt7iJrfny6Gr/fr+7du6tfv37q0qXLSWuat3Ein88nv98ftQAAgM6rzYPQmDFjtHHjRtXW1nrLqFGjlJ+f7/27W7duqqys9J5TV1en7du3KzMzU5KUmZmpjRs3Rt3dVVFRIb/fr8svv9yrOX4bzTXN20hISNDIkSOjaiKRiCorK70aAADgtja/RqhXr1664oorotb16NFDffv29dYXFBSoqKhIffr0kd/v1/3336/MzEx973vfkySNHTtWl19+uX7605+qtLRUwWBQv/jFL1RYWCifzydJuvfee/X000/roYce0l133aVly5ZpyZIlKi8v9/ZbVFSkCRMmaNSoURo9erR++9vf6uDBg5o4cWJbTxsAAHRA7XKx9Ok88cQTio+P16233qrGxkZlZ2frmWee8ca7dOmisrIy3XfffcrMzFSPHj00YcIEPfLII15Nenq6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rVu3TiNGjFB2drZ2794d69ba1IoVK1RYWKg///nPqqioUFNTk8aOHauDBw9G1U2aNElfffWVt5SWlsao47YzbNiwqDl9+OGH3tgDDzygt956S0uXLtWKFSu0a9cu3XLLLTHstu2sWbMmat4VFRWSpJ/85CdeTWc53gcPHtSIESO0YMGCk46XlpZq/vz5WrRokaqrq9WjRw9lZ2fr8OHDXk1+fr42b96siooKlZWVaeXKlZo8efLZmsI3cqp5Hzp0SOvWrdPMmTO1bt06/elPf1JdXZ1+9KMftah95JFHol4H999//9lo/1s53TGXpHHjxkXN65VXXoka74jHXDr93I+f81dffaU//OEPiouL06233hpVd84e9zb5dlOcsdGjR1thYaH3+NixY5aammolJSUx7Kr97d692yTZihUrvHXf//73berUqbFrqh3Mnj3bRowYcdKxhoYG69atmy1dutRb98knn5gkq6qqOksdnj1Tp061iy66yCKRiJl1zuNtZibJXnvtNe9xJBKxQCBg8+bN89Y1NDSYz+ezV155xczMtmzZYpJszZo1Xs0777xjcXFxtnPnzrPW+7dx4rxPZvXq1SbJvvzyS29dWlqaPfHEE+3bXDs72dwnTJhgN9988999Tmc45mZndtxvvvlm+8d//MeodefyceeM0Fl05MgR1dTUKCsry1sXHx+vrKwsVVVVxbCz9hcKhSRJffr0iVr/8ssvq1+/frriiis0Y8YMHTp0KBbttamtW7cqNTVVF154ofLz87V9+3ZJUk1NjZqamqKO/9ChQzVo0KBOd/yPHDmil156SXfddVfUFxZ3xuN9om3btikYDEYd56SkJGVkZHjHuaqqSsnJyRo1apRXk5WVpfj4eFVXV5/1nttLKBRSXFxci+9snDt3rvr27aurr75a8+bN09GjR2PTYBv74IMP1L9/fw0ZMkT33Xef9uzZ4425cszr6+tVXl6ugoKCFmPn6nHv9H9Z+lzyf//3fzp27FiLv2qdkpKiTz/9NEZdtb9IJKJp06bp2muv1RVXXOGtv+OOO5SWlqbU1FRt2LBBxcXFqqur05/+9KcYdvvtZGRk6IUXXtCQIUP01Vdf6eGHH9b111+vTZs2KRgMKiEhocWbQkpKioLBYGwabievv/66Ghoa9LOf/cxb1xmP98k0H8uT/Zw3jwWDQfXv3z9qvGvXrurTp0+neS0cPnxYxcXFysvLi/oCzp///Oe65ppr1KdPH61atUozZszQV199pccffzyG3X5748aN0y233KL09HR9/vnn+vd//3fdeOONqqqqUpcuXZw45pL04osvqlevXi0+8j+XjztBCO2usLBQmzZtirpWRlLUZ+PDhw/XgAEDNGbMGH3++ee66KKLznabbeLGG2/0/n3llVcqIyNDaWlpWrJkibp37x7Dzs6u3//+97rxxhuVmprqreuMxxsn19TUpNtuu01mpoULF0aNFRUVef++8sorlZCQoHvuuUclJSUd7qsZjnf77bd7/x4+fLiuvPJKXXTRRfrggw80ZsyYGHZ2dv3hD39Qfn6+EhMTo9afy8edj8bOon79+qlLly4t7hKqr69XIBCIUVfta8qUKSorK9Py5ct1wQUXnLI2IyNDkvTZZ5+djdbOiuTkZF166aX67LPPFAgEdOTIETU0NETVdLbj/+WXX+r999/X3Xfffcq6zni8JXnH8lQ/54FAoMUNEkePHtXevXs7/GuhOQR9+eWXqqioiDobdDIZGRk6evSovvjii7PT4Fly4YUXql+/ft7ruzMf82b//d//rbq6utP+7Evn1nEnCJ1FCQkJGjlypCorK711kUhElZWVyszMjGFnbc/MNGXKFL322mtatmyZ0tPTT/uc2tpaSdKAAQPaubuz58CBA/r88881YMAAjRw5Ut26dYs6/nV1ddq+fXunOv7PP/+8+vfvr5ycnFPWdcbjLUnp6ekKBAJRxzkcDqu6uto7zpmZmWpoaFBNTY1Xs2zZMkUiES8gdkTNIWjr1q16//331bdv39M+p7a2VvHx8S0+Nuro/vd//1d79uzxXt+d9Zgf7/e//71GjhypESNGnLb2nDrusb5a2zWvvvqq+Xw+e+GFF2zLli02efJkS05OtmAwGOvW2tR9991nSUlJ9sEHH9hXX33lLYcOHTIzs88++8weeeQRW7t2rW3bts3eeOMNu/DCC+2GG26Iceffzr/+67/aBx98YNu2bbOPPvrIsrKyrF+/frZ7924zM7v33ntt0KBBtmzZMlu7dq1lZmZaZmZmjLtuO8eOHbNBgwZZcXFx1PrOdrz3799v69evt/Xr15ske/zxx239+vXe3VFz58615ORke+ONN2zDhg128803W3p6un399dfeNsaNG2dXX321VVdX24cffmiXXHKJ5eXlxWpKZ+RU8z5y5Ij96Ec/sgsuuMBqa2ujfu4bGxvNzGzVqlX2xBNPWG1trX3++ef20ksv2Xe+8x278847Yzyz0zvV3Pfv32//9m//ZlVVVbZt2zZ7//337ZprrrFLLrnEDh8+7G2jIx5zs9O/3s3MQqGQnXfeebZw4cIWzz/XjztBKAaeeuopGzRokCUkJNjo0aPtz3/+c6xbanOSTro8//zzZma2fft2u+GGG6xPnz7m8/ns4osvtgcffNBCoVBsG/+Wxo8fbwMGDLCEhAQ7//zzbfz48fbZZ595419//bX9y7/8i/Xu3dvOO+88+/GPf2xfffVVDDtuW++9955Jsrq6uqj1ne14L1++/KSv7wkTJpjZ326hnzlzpqWkpJjP57MxY8a0+G+yZ88ey8vLs549e5rf77eJEyfa/v37YzCbM3eqeW/btu3v/twvX77czMxqamosIyPDkpKSLDEx0S677DL71a9+FRUWzlWnmvuhQ4ds7Nix9p3vfMe6detmaWlpNmnSpBb/g9sRj7nZ6V/vZmbPPvusde/e3RoaGlo8/1w/7nFmZu16ygkAAOAcxTVCAADAWQQhAADgLIIQAABwFkEIAAA4iyAEAACcRRACAADOIggBAABnEYQAAICzCEIAAMBZBCEAAOAsghAAAHAWQQgAADjr/wEFpSgz/dh0eQAAAABJRU5ErkJggg=="
},
"metadata": {},
"output_type": "display_data"
}
],
"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"
},
{
"cell_type": "code",
"outputs": [
{
"data": {
"text/plain": "<Figure size 640x480 with 1 Axes>",
"image/png": "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"
},
"metadata": {},
"output_type": "display_data"
}
],
"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
},
{
"cell_type": "code",
"execution_count": 78,
"outputs": [],
"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"
},
{
"cell_type": "code",
"outputs": [],
"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
},
{
"cell_type": "code",
"outputs": [],
"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
},
{
"cell_type": "code",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n",
"H: (0, 179), S: (0, 255), V: (0, 255)\n"
]
},
{
"ename": "error",
"evalue": "OpenCV(4.9.0) D:\\a\\opencv-python\\opencv-python\\opencv\\modules\\highgui\\src\\window_w32.cpp:2561: error: (-27:Null pointer) NULL window: 'HSV Thresholding' in function 'cvGetTrackbarPos'\n",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31merror\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[70], line 28\u001B[0m\n\u001B[0;32m 24\u001B[0m hsv \u001B[38;5;241m=\u001B[39m cv2\u001B[38;5;241m.\u001B[39mcvtColor(image, cv2\u001B[38;5;241m.\u001B[39mCOLOR_BGR2HSV)\n\u001B[0;32m 26\u001B[0m \u001B[38;5;28;01mwhile\u001B[39;00m \u001B[38;5;28;01mTrue\u001B[39;00m:\n\u001B[0;32m 27\u001B[0m \u001B[38;5;66;03m# 获取滑动条的当前位置\u001B[39;00m\n\u001B[1;32m---> 28\u001B[0m h_lower \u001B[38;5;241m=\u001B[39m \u001B[43mcv2\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mgetTrackbarPos\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[38;5;124;43mH Lower\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[38;5;124;43mHSV Thresholding\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[0;32m 29\u001B[0m h_upper \u001B[38;5;241m=\u001B[39m cv2\u001B[38;5;241m.\u001B[39mgetTrackbarPos(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mH Upper\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mHSV Thresholding\u001B[39m\u001B[38;5;124m'\u001B[39m)\n\u001B[0;32m 30\u001B[0m s_lower \u001B[38;5;241m=\u001B[39m cv2\u001B[38;5;241m.\u001B[39mgetTrackbarPos(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mS Lower\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mHSV Thresholding\u001B[39m\u001B[38;5;124m'\u001B[39m)\n",
"\u001B[1;31merror\u001B[0m: OpenCV(4.9.0) D:\\a\\opencv-python\\opencv-python\\opencv\\modules\\highgui\\src\\window_w32.cpp:2561: error: (-27:Null pointer) NULL window: 'HSV Thresholding' in function 'cvGetTrackbarPos'\n"
]
}
],
"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
},
{
"cell_type": "code",
"execution_count": 28,
"outputs": [],
"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"
},
{
"cell_type": "code",
"execution_count": 57,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"处理完成,掩膜图像已保存到指定文件夹。\n"
]
}
],
"source": [
" #先增强图像亮度然后循环提取并保存mask20240318版无锡透射百香果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"
},
{
"cell_type": "code",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"处理完成,掩膜图像已保存到指定文件夹。\n"
]
}
],
"source": [
" #先增强图像亮度然后循环提取并保存mask20240318版无锡透射百香果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
},
{
"cell_type": "code",
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
},
"id": "bc021fb45388a2b3"
}
],
"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
}