当前位置:   article > 正文

cv2实现图片相关操作_cv2展示图片

cv2展示图片

目录

一、图片基本操作

1.1 显示图片

1.2 图像处理

1.3 保存图片

二、图像标注操作

2.1 文本标注和矩形标注

2.2 圆形标注

2.3 箭头标注

2.4 多边形标注

2.5 椭圆标注

2.6 轮廓标注

2.7 填充多边形

2.8 绘制轮廓外接矩形和最小闭圆


一、图片基本操作

1.1 显示图片

  1. import cv2
  2. # 读取图片
  3. image = cv2.imread('image.jpg')
  4. # 显示图片
  5. cv2.imshow('Image', image)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()

1.2 图像处理

  1. import cv2
  2. # 读取图片
  3. image = cv2.imread('image.jpg')
  4. # 调整大小
  5. resized_image = cv2.resize(image, (new_width, new_height))
  6. # 裁剪
  7. cropped_image = image[y1:y2, x1:x2]
  8. # 旋转
  9. rows, cols = image.shape[:2]
  10. M = cv2.getRotationMatrix2D((cols/2, rows/2), angle, scale)
  11. rotated_image = cv2.warpAffine(image, M, (cols, rows))
  12. # 滤波
  13. blurred_image = cv2.GaussianBlur(image, (kernel_size, kernel_size), sigmaX)

1.3 保存图片

  1. # 保存图片
  2. cv2.imwrite('processed_image.jpg', processed_image)

二、图像标注操作

cv2.putText            #  文本标注

cv2.rectangle         #  矩形标注

cv2.circle               #  圆形标注

cv2.arrowedLine    #  箭头标注

cv2.polylines          # 多边形标注

cv2.ellipse              # 椭圆标注

cv2.drawContours  # 轮廓

cv2.fillPoly              # 多边形填充

2.1 文本标注和矩形标注

  1. # -*- coding: utf-8 -*-
  2. # @Author: GraceJiang
  3. # @Date: 2024/4/24
  4. # @Description:
  5. import cv2
  6. # 读取图片
  7. image = cv2.imread(r'F:\pythonScript\pythonProject\AI\annotation_Learning\testA\1.jpg')
  8. # 添加文本标注
  9. text = "Example Annotation"
  10. org = (50, 50) # 标注的起始位置
  11. font = cv2.FONT_HERSHEY_SIMPLEX
  12. font_scale = 1
  13. color = (255, 0, 0) # 标注的颜色,这里是蓝色
  14. thickness = 2
  15. image_with_annotation = cv2.putText(image, text, org, font, font_scale, color, thickness)
  16. # 添加矩形标注
  17. start_point = (100, 100) # 矩形的左上角坐标
  18. end_point = (200, 200) # 矩形的右下角坐标
  19. color = (0, 255, 0) # 标注的颜色,这里是绿色
  20. thickness = 2
  21. image_with_annotation = cv2.rectangle(image_with_annotation, start_point, end_point, color, thickness)
  22. # 显示带有标注的图片
  23. cv2.imshow('Image with Annotation', image_with_annotation)
  24. cv2.waitKey(0)
  25. cv2.destroyAllWindows()

2.2 圆形标注

  1. import cv2
  2. # 读取图片
  3. image = cv2.imread(r'F:\pythonScript\pythonProject\AI\annotation_Learning\testA\1.jpg')
  4. # 在图片上画圆
  5. center_coordinates = (300, 300) # 圆心的坐标
  6. radius = 100 # 圆的半径
  7. color = (0, 255, 0) # BGR格式的颜色值,这里是绿色
  8. thickness = 2 # 线条的厚度
  9. image_with_circle = cv2.circle(image, center_coordinates, radius, color, thickness)
  10. # 显示带有圆形标注的图片
  11. cv2.imshow('Image with Circle', image_with_circle)
  12. cv2.waitKey(0)
  13. cv2.destroyAllWindows()

 

2.3 箭头标注

  1. import cv2
  2. # 读取图片
  3. image = cv2.imread(r'F:\pythonScript\pythonProject\AI\annotation_Learning\testA\1.jpg')
  4. # 定义箭头起点和终点坐标
  5. start_point = (100, 100) # 箭头起点的坐标
  6. end_point = (300, 300) # 箭头终点的坐标
  7. color = (255, 0, 255) # BGR格式的颜色值,这里是紫色
  8. thickness = 2 # 线条的厚度
  9. image_with_arrow = cv2.arrowedLine(image, start_point, end_point, color, thickness)
  10. # 显示带有箭头标注的图片
  11. cv2.imshow('Image with Arrow', image_with_arrow)
  12. cv2.waitKey(0)
  13. cv2.destroyAllWindows()

 

2.4 多边形标注

  1. import cv2
  2. import numpy as np
  3. # 读取图片
  4. image = cv2.imread(r'F:\pythonScript\pythonProject\AI\annotation_Learning\testA\1.jpg')
  5. # 定义多边形顶点坐标
  6. pts1 = np.array([[100, 50], [200, 300], [700, 200], [500, 100]], np.int32)
  7. pts1 = pts1.reshape((-1, 1, 2))
  8. color1 = (0, 255, 0) # 绿色
  9. pts2 = np.array([[10, 50], [400, 50], [90, 200], [50, 500]], np.int32)
  10. pts2=pts2.reshape((-1, 1, 2))
  11. color2 = (255, 0, 0) # 蓝色
  12. # 在图片上绘制多边形
  13. color = (0, 0, 255) # BGR格式的颜色值,这里是红色
  14. thickness = 2 # 线条的厚度
  15. image_with_polygon = cv2.polylines(image, [pts1], isClosed=True, color=color1, thickness=thickness)
  16. image_with_polygon = cv2.polylines(image_with_polygon, [pts2], isClosed=True, color=color2, thickness=thickness)
  17. # 显示带有多边形标注的图片
  18. cv2.imshow('Image with Polygon', image_with_polygon)
  19. cv2.waitKey(0)
  20. cv2.destroyAllWindows()

 

2.5 椭圆标注

  1. import cv2
  2. import numpy as np
  3. # 创建一个空白图像
  4. img = np.zeros((512, 512, 3), np.uint8)
  5. # 定义椭圆参数
  6. center = (256, 256) # 椭圆中心坐标
  7. axes = (150, 100) # 长轴长度和短轴长度
  8. angle = 45 #旋转角度
  9. startAngle = 0 # 起始角度
  10. endAngle = 360 # 结束角度
  11. color = (0, 255, 0) # 颜色,这里使用绿色
  12. # 绘制椭圆
  13. image_with_ellipse = cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=3)
  14. # 显示绘制的图像
  15. cv2.imshow('Ellipse', image_with_ellipse)
  16. cv2.waitKey(0)
  17. cv2.destroyAllWindows()

 2.6 轮廓标注

  1. import cv2
  2. import numpy as np
  3. # 创建一个黑色的图像
  4. img = np.zeros((512,512,3), np.uint8)
  5. # 定义轮廓坐标
  6. contours = np.array([[100, 100], [300, 100], [200, 300]])
  7. # 将轮廓转换为OpenCV需要的格式
  8. contours = contours.reshape((-1, 1, 2))
  9. # 在图像上绘制轮廓
  10. cv2.drawContours(img, [contours], -1, (0,255,0), 3)
  11. # 显示绘制的图像
  12. cv2.imshow('Contours', img)
  13. cv2.waitKey(0)
  14. cv2.destroyAllWindows()

 

2.7 填充多边形

  1. import cv2
  2. import numpy as np
  3. # 创建一个黑色的图像
  4. img = np.zeros((512,512,3), np.uint8)
  5. # 定义多边形的顶点坐标
  6. pts = np.array([[10, 50], [400, 50], [90, 200], [50, 500]], np.int32)
  7. pts = pts.reshape((-1,1,2))
  8. # 在图像上绘制并填充多边形
  9. cv2.fillPoly(img, [pts], color=(0,255,0))
  10. # 显示绘制的图像
  11. cv2.imshow('Filled Polygon', img)
  12. cv2.waitKey(0)
  13. cv2.destroyAllWindows()

2.8 绘制轮廓外接矩形和最小闭圆

  1. import cv2
  2. import numpy as np
  3. # 生成一个示例图像
  4. img = np.zeros((300, 300, 3), np.uint8)
  5. cv2.rectangle(img, (50, 50), (200, 200), (255, 255, 255), -1) # 画一个白色矩形
  6. # 寻找轮廓
  7. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  8. ret, thresh = cv2.threshold(gray, 127, 255, 0)
  9. contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  10. # 复制原始图像用于绘制外接矩形和闭圆
  11. img_with_rect = img.copy()
  12. img_with_circle = img.copy()
  13. for contour in contours:
  14. # 绘制轮廓外接矩形
  15. x, y, w, h = cv2.boundingRect(contour)
  16. cv2.rectangle(img_with_rect, (x, y), (x+w, y+h), (0, 255, 0), 2)
  17. # 绘制最小闭圆
  18. (cx, cy), radius = cv2.minEnclosingCircle(contour)
  19. center = (int(cx), int(cy))
  20. radius = int(radius)
  21. cv2.circle(img_with_circle, center, radius, (0, 0, 255), 2)
  22. # 显示处理后的图像
  23. cv2.imshow('Bounding Rectangle', img_with_rect)
  24. cv2.imshow('Min Enclosing Circle', img_with_circle)
  25. cv2.waitKey(0)
  26. cv2.destroyAllWindows()

将图像转换为灰度图像,然后进行阈值化处理,最后找到图像中的轮廓存储在contours中.
  1. ​cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)​: 将彩色图像转换为灰度图像。在处理图像时,通常将其转换为灰度图像有助于简化处理,并减少计算量。

  2. ​ret, thresh = cv2.threshold(gray, 127, 255, 0)​: 对灰度图像进行阈值化处理。阈值化是将图像转换为二值图像的过程,即将像素值分为两类:大于阈值的部分设为255(白色),小于阈值的部分设为0(黑色)。阈值为127,超过该阈值的像素值被设为255。

  3. ​contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)​: 找到图像中的轮廓。cv2.findContours()​ 函数用于在二值图像中查找轮廓,返回所有轮廓的列表。参数 ​thresh​ 是二值图像,​cv2.RETR_EXTERNAL​ 表示只检测外部轮廓,​cv2.CHAIN_APPROX_SIMPLE​ 表示只保留轮廓的端点信息,以节省内存。​_​ 通常被用作一个占位符,表示接收的值将被丢弃,不会在后续的代码中使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/822891
推荐阅读
相关标签
  

闽ICP备14008679号