halcon筛选方形
时间: 2023-10-28 16:05:19 浏览: 94
在Halcon中,可以使用select_shape函数来筛选方形。
以下是一个示例代码,演示了如何使用select_shape函数筛选方形:
```
read_image (Image, 'D:/Halcon-WorkSpaces/Test/Image/test2.png')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 0)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'rectangularity','and',1,1)
dev_clear_window ()
dev_display (SelectedRegions)
```
这段代码首先读取图像,然后将其转换为灰度图像,并进行阈值处理和连通区域检测。接下来,使用select_shape函数筛选出满足矩形性质的区域,并将结果显示在屏幕上。
请注意,这只是一个简单的示例代码,你可以根据自己的需求进行更复杂的筛选条件设置。
相关问题
我想在Halcon中查找并分割出所有的边长为20的正方形
在Halcon图像处理库中,你可以通过以下几个步骤来查找并分割出所有边长为20像素的正方形:
1. **准备图像**:首先,你需要加载需要分析的图像到Halcon工作空间中。
```c++
Image im = LoadImage("input.jpg");
```
2. **预处理**:对图像进行灰度化、平滑等操作,以便于边缘检测。例如,可以使用`SmoothImage`函数进行滤波。
```c++
im = SmoothImage(im, FILTER_SMOOTH_MEDIAN, 5);
```
3. **边缘检测**:使用`FindEdges`函数寻找图像中的边缘,如Canny算子。
```c++
EdgeImage edges;
DetectEdgesBinary(im, edges, DETECT_CANNY, THRESHOLD_OTSU, 5, 100);
```
4. **轮廓提取**:从边缘图像中提取出轮廓,使用`FindContours`函数。
```c++
ContourSet contours;
FindContours(edges, contours, 0, CV_RETR_LIST, CHAIN_APPROX_SIMPLE);
```
5. **筛选正方形候选**:遍历找到的轮廓,检查它们是否接近正方形。这通常涉及到计算轮廓的最小外接矩形(MinimumBoundingRect),然后检查其宽高比接近1。
```c++
for (int i = 0; i < contours.GetCount(); i++) {
Rect rect = contours.GetRect(i);
float aspect_ratio = static_cast<float>(rect.Width) / rect.Height;
if (fabs(aspect_ratio - 1.0f) < epsilon) { // epsilon是一个小容差值
Size size(rect.Width, rect.Height);
if (size.width == 20 && size.height == 20) {
// 此时你已经找到了符合条件的正方形
// 可以进一步提取出来并保存或做其他操作
}
}
}
```
6. **结果处理**:最后,根据实际需求,你可以选择保存这些正方形区域,或者执行其他后续分析任务。
```c++
SaveImage(contours[i], "square_" + std::to_string(i) + ".jpg");
```
方块的halcon代码
### Halcon 方块检测与操作代码示例
为了实现方块的检测与操作,在 Halcon 中可以采用多种方法。下面提供了一个基于边缘检测和形状分析的方法来识别图像中的方形区域。
```cpp
// 加载测试图像
read_image (Image, 'square_test')
// 预处理:灰度转换和平滑滤波
convert_rgb_to_gray (Image, GrayImage)
median_image (GrayImage, MedianImage, 'circle', 3)
// 边缘提取
edges_sub_pix (MedianImage, Edges, 'canny', 1, 20, 40)
// 查找闭合轮廓
connection (Edges, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'convex')
// 形状特征筛选:选择接近正方形的区域
for i := 0 to |SelectedRegions|-1 by 1
area_center (SelectedRegions[i], Area, Row, Column)
smallest_rectangle1 (SelectedRegions[i], RowBegin, ColBegin, RowEnd, ColEnd)
// 计算宽高比例判断是否为近似正方形
Width = abs(ColEnd - ColBegin)
Height = abs(RowEnd - RowBegin)
AspectRatio = Width / Height
if ((AspectRatio >= 0.9) && (AspectRatio <= 1.1))
gen_cross_contour_xld (Cross, Row, Column, 5, 0.7854)
dev_display (Cross)
write_string ('Detected Square')
endif
endfor
```
上述代码展示了如何利用 Halcon 的函数库完成对方形物体的定位并标记出来。通过读取输入图片,经过预处理阶段增强对比度后,应用 Canny 算法获取清晰边界;再经由形态学运算保留封闭图形;最后依据宽度高度比值挑选符合条件的目标对象[^1]。
阅读全文
相关推荐














