一张图片中有使用cv2.line()画的不规则图像,写一段代码,计算该不规则图形中的像素点个数和总的像素点个数之比,Python语言
时间: 2024-05-30 18:14:03 浏览: 10
import cv2
# 读取图像
img = cv2.imread("irregular_shape.jpg")
# 将图像转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 使用cv2.findContours()函数提取轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
# 统计像素点个数
total_pixels = img.shape[0] * img.shape[1]
irregular_pixels = cv2.countNonZero(thresh)
# 计算比值
ratio = irregular_pixels / total_pixels
# 显示结果
cv2.imshow("image", img)
print("不规则图形像素点个数:", irregular_pixels)
print("总像素点个数:", total_pixels)
print("比值:", ratio)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关问题
用cv2.line()函数在一张道路交通图中画出一个不规则图形,写一段代码计算不规则图形的像素和整幅图像的像素比
import cv2
# 读取道路交通图
img = cv2.imread('road_traffic.jpg')
# 画出不规则图形
cv2.line(img, (100, 100), (200, 200), (0, 0, 255), 5)
cv2.line(img, (200, 200), (300, 100), (0, 0, 255), 5)
cv2.line(img, (300, 100), (100, 100), (0, 0, 255), 5)
cv2.line(img, (150, 150), (250, 150), (0, 0, 255), 5)
# 计算不规则图形的像素和
roi = img[100:201, 100:301]
roi_gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
ret, roi_thresh = cv2.threshold(roi_gray, 1, 255, cv2.THRESH_BINARY)
roi_pixel_num = cv2.countNonZero(roi_thresh)
# 计算整幅图像的像素和
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img_thresh = cv2.threshold(img_gray, 1, 255, cv2.THRESH_BINARY)
img_pixel_num = cv2.countNonZero(img_thresh)
# 计算像素比
pixel_ratio = roi_pixel_num / img_pixel_num
# 显示图像和像素比
cv2.imshow('image', img)
print('不规则图形的像素和:', roi_pixel_num)
print('整幅图像的像素和:', img_pixel_num)
print('不规则图形的像素和与整幅图像的像素比:', pixel_ratio)
cv2.waitKey(0)
cv2.destroyAllWindows()
写一个可以计算图像中不规则图形的长度、宽度、面积的python代码
以下是一个简单的Python代码示例,可以计算二值化图像中不规则图形的长度、宽度和面积。该代码使用OpenCV库进行图像处理。
```python
import cv2
# 读取图像
img = cv2.imread('image.png', 0)
# 二值化图像
ret, thresh = cv2.threshold(img, 127, 255, 0)
# 计算轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 找到最大轮廓
max_contour = max(contours, key=cv2.contourArea)
# 计算长度和宽度
(x, y), (width, height), angle = cv2.minAreaRect(max_contour)
if width < height:
width, height = height, width
angle += 90
# 计算面积
area = cv2.contourArea(max_contour)
# 输出结果
print('长度:', width)
print('宽度:', height)
print('面积:', area)
```
请注意,这个代码仅适用于二值化图像。如果您的图像不是二值化的,请先使用适当的图像处理技术将其转换为二值化图像。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)