提取图片中目标物轮廓的像素尺寸
1.导入数据库
import cv2
import numpy as np
from PIL import Image
2.导入图片
image_tif = Image.open('1.tif') #导入tif图像
image_tif.convert('RGB').save('1p.png','PNG') # 转换为png格式
image = cv2.imread('1p.png') #读取png图像
3.转化为灰度图
# 将图片转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用高斯模糊,减少噪声
blur = cv2.GaussianBlur(gray, (5, 5), 0)
4.二值化处理
# 二值化处理
ret, thresh = cv2.threshold(blur, 180, 255, cv2.THRESH_BINARY)
5.寻找目标物轮廓
# 寻找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #检测所有轮廓,建立树状结构关系;保存水平、垂直或对角线的端点
#contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) #检测所有轮廓,但不建立层次关系;保存轮廓上所有的点
# 遍历轮廓
for cnt in contours:
# 计算轮廓的边界框
x, y, w, h = cv2.boundingRect(cnt)
# 计算轮廓的面积
area = cv2.contourArea(cnt)
# 根据需要的条件过滤轮廓(例如,面积大小)
if area > 10000 and area < 20000: # 根据面积筛选目标物
# 绘制轮廓的边界框
cv2.rectangle(thresh, (x, y), (x+w, y+h), (0, 0, 255), 2)
# 打印尺寸
print(f"Object width: {w}, Object height: {h}")
# 显示图片
cv2.imshow('Detected Objects', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.结果展示
结果展示: Object width: 111, Object height: 140
完整代码
import cv2
import numpy as np
from PIL import Image
# 读取图片
#image = cv2.imread('1.tif')
image_tif = Image.open('1.tif') #导入tif图像
image_tif.convert('RGB').save('1p.png','PNG') # 转换为png格式
image = cv2.imread('1p.png') #读取png图像
# 将图片转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用高斯模糊,减少噪声
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 二值化处理
ret, thresh = cv2.threshold(blur, 180, 255, cv2.THRESH_BINARY)
# 寻找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #检测所有轮廓,建立树状结构关系;保存水平、垂直或对角线的端点
#contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) #检测所有轮廓,但不建立层次关系;保存轮廓上所有的点
# 遍历轮廓
for cnt in contours:
# 计算轮廓的边界框
x, y, w, h = cv2.boundingRect(cnt)
# 计算轮廓的面积
area = cv2.contourArea(cnt)
# 根据需要的条件过滤轮廓(例如,面积大小)
if area > 10000 and area < 20000: # 根据面积筛选目标物
# 绘制轮廓的边界框
cv2.rectangle(thresh, (x, y), (x+w, y+h), (0, 0, 255), 2)
# 打印尺寸
print(f"Object width: {w}, Object height: {h}")
# 显示图片
cv2.imshow('Detected Objects', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()