用python和opencv写出二值化
时间: 2023-07-04 20:27:16 浏览: 130
好的,以下是用 Python 和 OpenCV 实现的二值化代码:
```python
import cv2
# 加载图像
img = cv2.imread("image.jpg")
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 应用阈值
threshold_value = 127
max_value = 255
_, binary = cv2.threshold(gray, threshold_value, max_value, cv2.THRESH_BINARY)
# 显示结果
cv2.imshow("Binary Image", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先加载了一个图像,然后将其转换为灰度图像。接下来,我们应用了一个阈值,将图像二值化。最后,我们显示了二值化的结果。
在这个例子中,我们使用的阈值是 127,这意味着所有像素值小于 127 的像素都被设置为 0,所有像素值大于或等于 127 的像素都被设置为 255。如果你想要尝试不同的阈值,可以更改 `threshold_value` 变量的值。
相关问题
请写出python opencv 画出二值化图片百分之一的轮廓点具体代码
### 回答1:
import cv2img = cv2.imread('image.jpg', 0) # 读取图片
ret,thresh = cv2.threshold(img,127,255,0) # 二值化
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 找出轮廓# 画出百分之一的轮廓点
epsilon = 0.01*cv2.arcLength(contours[0],True)
approx = cv2.approxPolyDP(contours[0],epsilon,True)cv2.drawContours(img, [approx], 0, (0,255,0), 5) # 画出轮廓
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
### 回答2:
import cv2
# 读取原始图片
image = cv2.imread('image.jpg', 0)
# 对图像进行二值化处理
ret, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(binary_image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
# 计算轮廓的点数
total_points = 0
for contour in contours:
total_points += contour.shape[0]
# 提取百分之一的轮廓点数
required_points = total_points // 100
# 绘制百分之一的轮廓点
drawn_points = 0
for contour in contours:
points = contour.shape[0]
if drawn_points + points <= required_points:
for point in contour:
cv2.circle(image, tuple(point[0]), 1, (0, 255, 0), -1)
drawn_points += points
else:
remaining_points = required_points - drawn_points
for i in range(remaining_points):
cv2.circle(image, tuple(contour[i][0]), 1, (0, 255, 0), -1)
break
# 显示带有百分之一轮廓点的图片
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
### 回答3:
import cv2
# 加载图像
image = cv2.imread('input_image.jpg', 0)
# 二值化处理
_, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 计算出需要绘制的点数
total_points = int(len(contours[0]) * 0.01)
# 提取并绘制指定数量的随机轮廓点
import random
random_points = random.sample(contours[0].tolist(), total_points)
for point in random_points:
x, y = point[0]
cv2.circle(image, (x, y), 2, (0, 0, 255), -1)
# 显示结果图像
cv2.imshow('Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
请写出python opencv 找出二值化图片百分之一的轮廓点坐标的具体代码
import cv2
import numpy as np # 读取图片
img = cv2.imread('image.png', 0) # 获取图片二值化
ret, thresh = cv2.threshold(img, 127, 255, 0) # 找到轮廓
contours, hierarchy = cv2.findContours(thresh, 1, 2) # 获取轮廓百分之一的坐标点
contour_points = contours[0][::int(len(contours[0])/100)] # 打印坐标
for point in contour_points:
print(point[0])
阅读全文