求一个图片捕捉框边的程序
原图处理后
框选内的RGB值,导入一个二维列表中。
输入长边与短边的长度。(有数据就可)
感激! 您可以使用Python中的OpenCV库来实现这个程序。以下是实现的步骤:
1. 读取原始图像并将其转换为灰度图像。
2. 使用Canny边缘检测算法检测图像中的边缘。
3. 使用霍夫变换检测图像中的直线。
4. 根据直线的位置计算出边框的位置。
5. 从原始图像中提取边框内的像素值,并将其存储在一个二维列表中。
下面是Python代码示例:
import cv2
# 读取原始图像并转换为灰度图像
img = cv2.imread('original_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Canny边缘检测
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 霍夫变换检测直线
lines = cv2.HoughLines(edges, 1, cv2.cv2.PI/180, 200)
# 计算边框位置
for line in lines:
rho, theta = line
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
# 绘制直线
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 提取边框内的像素值并存储在二维列表中
box = []
for x in range(x1, x2):
row = []
for y in range(y1, y2):
row.append(img)
box.append(row)
其中, original_image.jpg 是原始图像的文件名。 x1 、 y1 、 x2 、 y2 是边框的位置。 box 是存储像素值的二维列表。您需要根据实际情况调整参数以获得最佳结果。 isdkz 发表于 2023-5-10 20:19
您可以使用Python中的OpenCV库来实现这个程序。以下是实现的步骤:
1. 读取原始图像并将其转换为灰度图像 ...
非常感谢您的回复
程序运行时出现下面错误,请问是那出问题了。
lines = cv2.HoughLines(edges, 1, cv2.cv2.PI/180, 200)
AttributeError: module 'cv2.cv2' has no attribute 'PI' wgij007 发表于 2023-5-11 08:01
非常感谢您的回复
程序运行时出现下面错误,请问是那出问题了。
对不起,我犯了一个错误。在 OpenCV 中并没有定义 π (PI),您可以直接使用 Python 的 math 库中的 π。所以,您应该将cv2.cv2.PI/180替换为math.pi/180 。
请看下面的修正后的代码:
import cv2
import numpy as np
import math
# 读取原始图像并转换为灰度图像
img = cv2.imread('original_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Canny边缘检测
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 霍夫变换检测直线
lines = cv2.HoughLines(edges, 1, math.pi/180, 200)
# 计算边框位置
for line in lines:
rho, theta = line
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
# 绘制直线
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 提取边框内的像素值并存储在二维列表中
box = []
for x in range(x1, x2):
row = []
for y in range(y1, y2):
row.append(img)
box.append(row)
我希望这可以解决您的问题! 这是chatGPT在互问互答吗 isdkz 发表于 2023-5-11 08:49
对不起,我犯了一个错误。在 OpenCV 中并没有定义 π (PI),您可以直接使用 Python 的 math 库中的 π ...
您好,还是有个报错
for line in lines:
TypeError: 'NoneType' object is not iterable
好像是 函数返回值赋值没有 程序没看明 感激分享,认真学习。
页:
[1]