supermachine--tomato-passio.../20240410RGBtest1/01picturemask.ipynb

445 lines
12 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2024-04-10T14:49:51.025756600Z",
"start_time": "2024-04-10T14:49:51.021739700Z"
}
},
"source": [],
"outputs": []
},
{
"cell_type": "code",
"source": [
" import cv2\n",
" import numpy as np\n",
" import matplotlib.pyplot as plt\n",
" image = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\TopImage_32.jpg')\n",
" r_channel = image[:, :, 2]\n",
" b_channel = image[:, :, 0]\n",
" gray_image = r_channel - b_channel\n",
" gray_image = np.clip(gray_image, 0, 255)\n",
" gray_image = np.uint8(gray_image)\n",
"\n",
" # 显示新生成的灰度图像\n",
" plt.imshow(gray_image, cmap='gray')\n",
" plt.axis('off')\n",
" plt.show()\n",
" "
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T14:53:49.016762Z",
"start_time": "2024-04-10T14:53:48.426912500Z"
}
},
"id": "206810a054630770",
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"# 读取RGB图像\n",
"img = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\TopImage_32.jpg')\n",
"\n",
"\n",
"# 获取图像的高度和宽度\n",
"height, width, _ = img.shape\n",
"\n",
"# 创建一个新的灰度图像\n",
"gray_img = np.zeros((height, width), dtype=np.uint8)\n",
"\n",
"# 遍历每个像素,计算R-B作为新的灰度值\n",
"for y in range(height):\n",
" for x in range(width):\n",
" r, g, b = img[y, x]\n",
" gray_value = r - b\n",
" if gray_value < 0:\n",
" gray_value = 0\n",
" elif gray_value > 255:\n",
" gray_value = 255\n",
" gray_img[y, x] = int(gray_value)\n",
"\n",
"\n",
"plt.imshow(gray_image, cmap='gray')\n",
"plt.axis('off')\n",
"plt.show()\n",
" \n",
"# 保存灰度图像\n",
"# cv2.imwrite('output_image.jpg', gray_img)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T15:04:30.607530400Z",
"start_time": "2024-04-10T15:03:55.344343200Z"
}
},
"id": "ba82f5c2fd049821",
"execution_count": 9,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import torch\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"def extract_r_minus_b(image):\n",
" img_tensor = torch.tensor(image, dtype=torch.float32).to('cuda')\n",
"\n",
" r_channel = img_tensor[:, :, 0]\n",
" b_channel = img_tensor[:, :, 2]\n",
"\n",
" # 检查是否存在 NoneType 值,并将其替换为 0\n",
" r_channel = torch.nan_to_num(r_channel, nan=0)\n",
" b_channel = torch.nan_to_num(b_channel, nan=0)\n",
"\n",
" r_minus_b = torch.clamp(r_channel - b_channel, 0, 255).to('cpu').numpy().astype(np.uint8)\n",
"\n",
" return r_minus_b\n",
"\n",
"# 测试图像路径\n",
"image_path = '20240410tomatoRGBtest2/data/39.bmp'\n",
"\n",
"# 读取图像\n",
"image = cv2.imread(image_path)\n",
"\n",
"# 测试 extract_r_minus_b() 函数\n",
"r_minus_b = extract_r_minus_b(image)\n",
"\n",
"# 显示结果\n",
"plt.imshow(r_minus_b, cmap='gray')\n",
"plt.title('R-B Channel Difference')\n",
"plt.axis('off')\n",
"plt.show()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T16:01:24.857246200Z",
"start_time": "2024-04-10T16:01:24.805385100Z"
}
},
"id": "7f09896cca12ec80",
"execution_count": 15,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### 自适应阈值分割\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 读取R通道减去B通道的灰度图\n",
"gray_image = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\r-b.jpg', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# 自适应阈值分割\n",
"adaptive_threshold = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)\n",
"\n",
"# 显示结果\n",
"plt.imshow(adaptive_threshold, cmap='gray')\n",
"plt.axis('off')\n",
"plt.show()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T14:49:51.023762Z",
"start_time": "2024-04-10T14:49:47.876441200Z"
}
},
"id": "b9a2db758d89860e",
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### 带滑动条调节的阈值分割\n",
"\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import ipywidgets as widgets\n",
"from IPython.display import display\n",
"\n",
"# 读取R通道减去B通道的灰度图\n",
"gray_image = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\r-b.jpg', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# 定义回调函数\n",
"def threshold_callback(threshold):\n",
" _, thresholded_image = cv2.threshold(gray_image, threshold, 255, cv2.THRESH_BINARY)\n",
" plt.imshow(thresholded_image, cmap='gray')\n",
" plt.axis('off')\n",
" plt.show()\n",
"\n",
"# 创建滑动条\n",
"threshold_slider = widgets.IntSlider(min=0, max=255, step=1, value=128, description='Threshold:')\n",
"display(threshold_slider)\n",
"\n",
"# 调用回调函数\n",
"threshold_callback(threshold_slider.value)\n",
"\n",
"# 连接滑动条和回调函数\n",
"widgets.interactive(threshold_callback, threshold=threshold_slider)\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T09:49:57.666748700Z",
"start_time": "2024-04-10T09:49:56.140521900Z"
}
},
"id": "6ff8e4e22d034f53",
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### Otsu阈值分割\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 读取R通道减去B通道的灰度图\n",
"gray_image = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\r-b.jpg', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# 使用Otsu阈值分割\n",
"_, otsu_threshold = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)\n",
"\n",
"# 显示结果\n",
"plt.imshow(otsu_threshold, cmap='gray')\n",
"plt.axis('off')\n",
"plt.show()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T09:54:09.077152500Z",
"start_time": "2024-04-10T09:54:08.502123300Z"
}
},
"id": "6207115686820296",
"execution_count": 8,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### Sobel边缘检测\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 读取R通道减去B通道的灰度图\n",
"gray_image = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\r-b.jpg', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# 使用Sobel边缘检测\n",
"sobel_x = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=5)\n",
"sobel_y = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=5)\n",
"edges = np.sqrt(sobel_x**2 + sobel_y**2)\n",
"\n",
"# 显示结果\n",
"plt.imshow(edges, cmap='gray')\n",
"plt.axis('off')\n",
"plt.show()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T09:55:13.525305800Z",
"start_time": "2024-04-10T09:55:12.652295600Z"
}
},
"id": "f3bd38e5e62cbd3c",
"execution_count": 9,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### 形态学处理\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 读取R通道减去B通道的灰度图\n",
"gray_image = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\r-b.jpg', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# 定义结构元素\n",
"kernel = np.ones((2,2),np.uint8)\n",
"\n",
"# 闭运算\n",
"closing = cv2.morphologyEx(gray_image, cv2.MORPH_CLOSE, kernel)\n",
"\n",
"# 显示结果\n",
"plt.imshow(closing, cmap='gray')\n",
"plt.axis('off')\n",
"plt.show()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T09:57:05.878548800Z",
"start_time": "2024-04-10T09:57:05.060591800Z"
}
},
"id": "7395629910ee8620",
"execution_count": 11,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### 角点检测\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 读取R通道减去B通道的灰度图\n",
"gray_image = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\data\\r-b.jpg', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# Shi-Tomasi角点检测\n",
"corners = cv2.goodFeaturesToTrack(gray_image, 100, 0.01, 10)\n",
"\n",
"# 绘制角点\n",
"corners = np.int0(corners)\n",
"for i in corners:\n",
" x, y = i.ravel()\n",
" cv2.circle(gray_image, (x, y), 3, 255, -1)\n",
"\n",
"# 显示结果\n",
"plt.imshow(gray_image, cmap='gray')\n",
"plt.axis('off')\n",
"plt.show()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-10T09:59:32.789829500Z",
"start_time": "2024-04-10T09:59:31.769444500Z"
}
},
"id": "990a0ecebe27d9a0",
"execution_count": 12,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### 二值化对象\n",
"\n",
"import cv2\n",
"import numpy as np\n",
"\n",
"# 读取原始图像\n",
"img = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\output\\r_minus_b_26.jpg', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# 使用Otsu's二值化方法\n",
"_, binary_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)\n",
"\n",
"# # 显示二值化后的图像\n",
"# cv2.imshow('Binary Image', binary_img)\n",
"# cv2.waitKey(0)\n",
"# cv2.destroyAllWindows()\n",
"# 保存二值化后的图像\n",
"cv2.imwrite('06.jpg', binary_img)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-12T06:34:26.530387300Z",
"start_time": "2024-04-12T06:34:26.132598800Z"
}
},
"id": "c4a6c0bfd05d3283",
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"source": [
"### 光滑边缘\n",
"import cv2\n",
"import numpy as np\n",
"\n",
"# 假设您的两张图像已经保存为 image1.png 和 image2.png\n",
"image1 = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\06.jpg', cv2.IMREAD_GRAYSCALE)\n",
"image2 = cv2.imread(r'D:\\project\\Tomato\\20240410tomatoRGBtest2\\010.png', cv2.IMREAD_GRAYSCALE)\n",
"\n",
"# 应用高斯模糊来平滑边缘\n",
"smoothed_image1 = cv2.GaussianBlur(image1, (9, 9), 0)\n",
"smoothed_image2 = cv2.GaussianBlur(image2, (9, 9), 0)\n",
"\n",
"# 将处理后的图像转换为二值图像\n",
"_, binary_image1 = cv2.threshold(smoothed_image1, 128, 255, cv2.THRESH_BINARY)\n",
"_, binary_image2 = cv2.threshold(smoothed_image2, 128, 255, cv2.THRESH_BINARY)\n",
"\n",
"# 保存二值化后的图像\n",
"cv2.imwrite('smoothed_binary_image06.png', binary_image1)\n",
"cv2.imwrite('smoothed_binary_image2.png', binary_image2)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2024-04-12T06:35:18.063684900Z",
"start_time": "2024-04-12T06:35:17.935028900Z"
}
},
"id": "1f6ac60b3150fc9e",
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"source": [],
"metadata": {
"collapsed": false
},
"id": "3749d97ac3719946",
"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
}