|
发表于 2024-7-3 18:53:13
|
显示全部楼层
爱FishC的鱼油,你可真是铁杆粉丝!既然如此,咱们就让你这个问题不再成为障碍,让你大展身手!
### 图像特征提取
所谓图像特征提取,其实就是找到图片中的“闪光点”,让计算机能够理解和区分不同的图像。这些闪光点包括颜色、纹理和形状。
- **颜色**:颜色特征可以通过计算图像的颜色直方图来实现。颜色直方图是对图像中每种颜色的分布进行统计的一种方式。
- import cv2
- import numpy as np
- # 读取图像
- img = cv2.imread('image.jpg')
- # 转换为HSV颜色空间
- hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
- # 计算颜色直方图
- hist = cv2.calcHist([hsv_img], [0, 1], None, [180, 256], [0, 180, 0, 256])
复制代码
- **纹理**:纹理特征可以通过灰度共生矩阵(GLCM)来提取。它是一种统计纹理分析方法。
- from skimage.feature import greycomatrix, greycoprops
- # 将图像转换为灰度图
- gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- # 计算灰度共生矩阵
- glcm = greycomatrix(gray_img, distances=[5], angles=[0, np.pi/4, np.pi/2, 3*np.pi/4], levels=256, symmetric=True, normed=True)
- # 提取纹理特征
- contrast = greycoprops(glcm, 'contrast')
- dissimilarity = greycoprops(glcm, 'dissimilarity')
- homogeneity = greycoprops(glcm, 'homogeneity')
- energy = greycoprops(glcm, 'energy')
- correlation = greycoprops(glcm, 'correlation')
复制代码
- **形状**:形状特征可以通过边缘检测和轮廓查找来提取。
- # 边缘检测
- edges = cv2.Canny(gray_img, 100, 200)
- # 找轮廓
- contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
复制代码
### 批量读取图像并保存结果
至于如何读取整个文件夹的所有图像并保存结果,大概思路是用Python的 `os` 模块遍历文件夹,并在分析后将结果保存到一个目录里。
下面是示例代码:
- import os
- import cv2
- from skimage.feature import greycomatrix, greycoprops
- def process_image(path):
- img = cv2.imread(path)
- gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- edges = cv2.Canny(gray_img, 100, 200)
- contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
- # 这里可以添加更多特征提取的处理代码
- # 创建结果图像,标注轮廓
- result_img = img.copy()
- cv2.drawContours(result_img, contours, -1, (0, 255, 0), 2)
- return result_img
- def process_folder(folder_path, output_folder):
- if not os.path.exists(output_folder):
- os.makedirs(output_folder)
-
- for filename in os.listdir(folder_path):
- if filename.endswith(".jpg") or filename.endswith(".png"): # 支持更多格式
- file_path = os.path.join(folder_path, filename)
- result_img = process_image(file_path)
- output_path = os.path.join(output_folder, f"processed_{filename}")
- cv2.imwrite(output_path, result_img)
- # 调用处理函数
- input_folder = "path_to_your_folder"
- output_folder = "path_to_output_folder"
- process_folder(input_folder, output_folder)
复制代码
这个脚本会遍历指定文件夹中的所有图片,处理每张图片,提取特征并将结果保存到输出文件夹中。你只需要替换 `input_folder` 和 `output_folder` 为实际的路径即可。
我们FishC团队可是全心全意为大家服务,希望这段代码帮助你顺利解决问题!有问题随时来提哦!继续支持我们噢!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|