lines = cv2.HoughLinesP(edges, 1, cv2.cv2.PI/180, 100, minLineLength=100, maxLineGap=10) AttributeError: module 'cv2' has no attribute 'cv2'
时间: 2023-09-28 22:05:59 浏览: 69
这个错误提示告诉我们,你在使用cv2模块时出错了。具体来说,你在调用cv2模块中的常量PI时,使用了cv2.cv2.PI/180的形式,但实际上cv2模块没有cv2这个子模块,因此出现了AttributeError。
要修复这个错误,你只需要将cv2.cv2.PI/180替换为cv2.PI/180即可。cv2模块中的常量PI表示圆周率,其值为3.14159265358979323846。因此,正确的代码应该是这样的:
```
lines = cv2.HoughLinesP(edges, 1, cv2.PI/180, 100, minLineLength=100, maxLineGap=10)
```
这样就可以避免这个错误了。
相关问题
def process_image(image_path, output_folder): gray = cv2.imread(image_path) edges = cv2.Canny(gray, 50, 150) lines = cv2.HoughLines(edges, 1, np.pi / 180, threshold=90) sum_angle = 0 count = 0 if lines is not None: for line in lines: rho, theta = line[0] angle = theta * 180 / np.pi sum_angle += angle count += 1 avg_angle = sum_angle / count rotated_image = rotate_image(gray, avg_angle) filename = os.path.basename(image_path) output_path = os.path.join(output_folder, filename) cv2.imwrite(output_path, rotated_image) def rotate_image(image, angle): height, width = image.shape[:2] center = (width // 2, height // 2) rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1.0) rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height)) return rotated_image input_folder = 'img_out_binary' output_folder = 'rotated_img' os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(input_folder): if filename.endswith(".jpg") or filename.endswith(".JPG"): image_path = os.path.join(input_folder, filename) process_image(image_path, output_folder) 优化程序,使程序可以对图片文件名包含汉字的图片进行处理和保存
要使程序能够处理和保存包含汉字的图片文件名,您可以对`process_image()`函数进行修改。在处理图片之前,您可以对文件名进行URL编码,然后使用编码后的文件名来保存旋转后的图片。以下是修改后的代码:
```python
def process_image(image_path, output_folder):
# 对文件名进行URL编码
encoded_filename = urllib.parse.quote(os.path.basename(image_path))
gray = cv2.imread(image_path)
edges = cv2.Canny(gray, 50, 150)
lines = cv2.HoughLines(edges, 1, np.pi / 180, threshold=90)
sum_angle = 0
count = 0
if lines is not None:
for line in lines:
rho, theta = line[0]
angle = theta * 180 / np.pi
sum_angle += angle
count += 1
avg_angle = sum_angle / count
rotated_image = rotate_image(gray, avg_angle)
# 使用编码后的文件名来保存旋转后的图片
output_path = os.path.join(output_folder, encoded_filename)
cv2.imwrite(output_path, rotated_image)
```
在修改后的代码中,首先使用`urllib.parse.quote()`函数对文件名进行编码,然后使用编码后的文件名来构建输出路径。这样可以确保保存的文件名不会受到包含汉字的影响。
另外,确保在程序中正确导入`urllib.parse`模块来使用URL编码函数。
AttributeError Traceback (most recent call last) Input In [7], in <cell line: 11>() 8 edges = cv2.Canny(gray, 50, 150, apertureSize=3) 10 # 使用霍夫变换检测表格的水平和垂直线条 ---> 11 lines = cv2.HoughLinesP(edges, 1, cv2.PI / 180, 100, minLineLength=100, maxLineGap=10) 13 # 使用线条交点检测算法找到表格的所有交点,并将其保存到一个列表中 14 points = [] AttributeError: module 'cv2' has no attribute 'PI'
这个错误是因为cv2模块中没有名为PI的属性。可能是因为您使用的是较旧版本的OpenCV库。可以将这个属性改为math模块中的pi属性,如下所示:
```
import cv2
import math
# 读取图像并转换为灰度图像
img = cv2.imread('table.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测算法得到边缘图像
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 使用霍夫变换检测表格的水平和垂直线条
lines = cv2.HoughLinesP(edges, 1, math.pi / 180, 100, minLineLength=100, maxLineGap=10)
# 使用线条交点检测算法找到表格的所有交点,并将其保存到一个列表中
points = []
```
这样应该就可以避免这个错误了。
阅读全文