HSV 通道分离

// 转换成hsv 
	cv::Mat img_h, img_s, img_v, imghsv;
	std::vector<cv::Mat> hsv_vec;
	cv::cvtColor(srcImage, imghsv, CV_BGR2HSV);
	cv::imshow("hsv", imghsv);
	cv::waitKey(0);
	// 分割hsv通道
	cv::split(imghsv, hsv_vec);
	img_h = hsv_vec[0];
	img_s = hsv_vec[1];
	img_v = hsv_vec[2];
	img_h.convertTo(img_h, CV_32F);
	img_s.convertTo(img_s, CV_32F);
	img_v.convertTo(img_v, CV_32F);
	double max_s, max_h, max_v;
	cv::minMaxIdx(img_h, 0, &max_h);
	cv::minMaxIdx(img_s, 0, &max_s);
	cv::minMaxIdx(img_v, 0, &max_v);
	// 各个通道归一化
	img_h /= max_h;
	img_s /= max_s;
	img_v /= max_v;



转载:http://blog.youkuaiyun.com/zhuwei1988

### 图像处理与路径规划的算法流程 #### 1. 图像采集 图像采集是整个过程的第一步,通过摄像头或其他设备获取原始图像数据。这些图像可能包含噪声、模糊等问题,因此需要进一步处理。 #### 2. 图像预处理 图像预处理的主要目标是对原始图像进行初步优化,以便后续操作更加高效和精确。常见的预处理方法包括去噪、对比度调整以及锐化等[^2]。 ```python import cv2 import numpy as np # 去噪 image = cv2.imread('input_image.jpg') denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21) # 对比度调整 clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) gray = cv2.cvtColor(denoised_image, cv2.COLOR_BGR2GRAY) contrast_enhanced = clahe.apply(gray) ``` #### 3. HSV通道分离 为了更好地提取颜色特征,通常将RGB图像转换为HSV颜色空间。这是因为HSV更接近人类感知的颜色模式,便于区分色调、饱和度和亮度[^3]。 ```python # 转换至HSV颜色空间 hsv_image = cv2.cvtColor(denoised_image, cv2.COLOR_BGR2HSV) # 提取H/S/V通道 hue_channel, saturation_channel, value_channel = cv2.split(hsv_image) ``` #### 4. 特征提取 基于HSV通道的信息,可以定义特定的目标对象(如红色西红柿),并利用阈值分割技术来提取感兴趣区域(ROI)。此外,还可以结合其他特征(如纹理或形状)以提高检测精度[^3]。 ```python # 定义红色范围 (HSV中的红⾊分为两部分) lower_red_1 = np.array([0, 50, 50]) upper_red_1 = np.array([10, 255, 255]) lower_red_2 = np.array([160, 50, 50]) upper_red_2 = np.array([180, 255, 255]) mask1 = cv2.inRange(hsv_image, lower_red_1, upper_red_1) mask2 = cv2.inRange(hsv_image, lower_red_2, upper_red_2) red_mask = mask1 | mask2 # 应用掩码得到目标区域 result = cv2.bitwise_and(denoised_image, denoised_image, mask=red_mask) ``` #### 5. 目标定位 完成特征提取后,可以通过边界框绘制等方式标记出目标位置。对于复杂的多尺度场景,可采用类似于SNIPER的方法减少计算开销的同时保持较高的准确性[^1]。 #### 6. 路径规划 一旦确定了目标的位置,就可以进入路径规划阶段。这一步骤涉及机器人如何从当前位置移动到目标点。常用的技术包括A*算法、Dijkstra算法或者基于RSSI信号强度估计距离的WSN定位方案[^4]。 ```python from queue import PriorityQueue def a_star(start, goal, grid_map): open_set = PriorityQueue() open_set.put((0, start)) came_from = {} g_score = {start: 0} while not open_set.empty(): current = open_set.get()[1] if current == goal: break neighbors = get_neighbors(current, grid_map) for neighbor in neighbors: tentative_g = g_score[current] + distance_between(current, neighbor) if neighbor not in g_score or tentative_g < g_score[neighbor]: came_from[neighbor] = current g_score[neighbor] = tentative_g f_score = tentative_g + heuristic(goal, neighbor) open_set.put((f_score, neighbor)) return reconstruct_path(came_from, start, goal) ``` --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值