pythonopencv图像绘制点
时间: 2023-05-29 10:04:16 浏览: 605
在Python OpenCV中,可以使用cv2.circle()函数绘制一个点。
下面是一个示例代码:
```
import cv2
# 创建一个黑色图像
img = np.zeros((512,512,3), np.uint8)
# 绘制一个红色点
cv2.circle(img, (256,256), 10, (0,0,255), -1)
# 显示图像
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先创建了一个512x512的黑色图像。然后,我们使用cv2.circle()函数在图像中心绘制了一个半径为10的红色点。最后,我们使用cv2.imshow()函数显示图像,并使用cv2.waitKey()函数等待用户按下任意键关闭窗口。
cv2.circle()函数的参数说明:
```
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
```
- img: 需要绘制点的图像。
- center: 点的中心坐标。格式为(x,y)。
- radius: 点的半径。
- color: 点的颜色。格式为(B,G,R)。
- thickness: 点的线宽。如果为-1,则填充整个圆。
- lineType: 线条类型。默认为8连接线。
- shift: 点坐标中的小数位数。默认为0。
相关问题
pythonopencv图像轮廓
### 使用Python OpenCV实现图像轮廓检测
为了使用 Python 和 OpenCV 实现图像轮廓检测,需遵循一系列处理步骤来准备和分析图像数据。
#### 准备工作
首先导入必要的库并加载待处理的图像:
```python
import cv2
import numpy as np
img = cv2.imread('shapes.png')
```
接着将彩色图像转换成灰度图以便后续操作更简单高效[^1]:
```python
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
#### 边缘检测与二值化
应用边缘检测算法(如Canny)以及阈值处理使图像变为黑白两色,突出显示物体边界:
```python
edges = cv2.Canny(gray, 50, 150)
_, thresh = cv2.threshold(edges, 127, 255, 0)
```
#### 轮廓查找
利用 `findContours` 方法获取图像内的所有封闭曲线即轮廓,并可选择只保留外部轮廓以简化结果集。这里采用 RETR_EXTERNAL 参数仅提取最外层轮廓[^3]:
```python
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
对于每一个找到的轮廓,还可以进一步计算其几何特性比如面积大小用于筛选感兴趣的对象:
```python
for contour in contours[:5]: # 只取前五个轮廓作为例子展示
area = cv2.contourArea(contour)
print(f'Contour Area: {area}')
if area > 100: # 假设设定最小面积过滤条件为100像素平方
(x,y),radius = cv2.minEnclosingCircle(contour) # 计算最小包围圆[^2]
center = (int(x), int(y))
radius = int(radius)
img_with_circle = cv2.circle(img.copy(), center, radius, (0, 255, 0), 2)
cv2.imshow('Detected Shapes', img_with_circle)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码片段展示了如何读入图片、转化为灰度模式、执行边缘增强及二值分割、定位目标物轮廓并通过绘制圆形标注出来。最终通过窗口显示带有标记的结果图像给用户查看[^4]。
pythonopencv图像轮廓识别
在Python中使用OpenCV进行图像轮廓识别的代码如下所示:
引用中的代码使用了`cv2.findContours()`函数来查找图像中的轮廓。该函数的输入参数是二值化图像,可以使用`cv2.threshold()`函数将灰度图像转化为二值图像。`cv2.findContours()`函数返回一个包含所有轮廓的列表,每个轮廓都是一个包含点的数组。下来,可以使用`cv2.drawContours()`函数将这些轮廓绘制在原始图像上。
引用中的代码使用了类似的方法,但是还添加了一些额外的步骤。首先,使用`cv2.findContours()`函数找到所有轮廓。然后,使用`cv2.boundingRect()`函数计算每个轮廓的边界框。通过设置一个阈值来选择具有足够大宽度的边界框,
阅读全文