OpenCV图像处理基础 *** 作(4)

OpenCV图像处理基础 *** 作(4),第1张

OpenCV图像处理基础 *** 作(4) 栗子

此例子演示了将一个图像读入、然后画一个矩形框、然后把这个矩形框裁剪出来、然后把裁剪出来的图像保存下来、然后把裁剪出来的图像放大1.5倍、然后再放大后的图像上画几个点、然后把这几个点之间连上线、然后把绘制好了线条的图像再等比例缩小回去、然后把缩小回去的图像再贴到原来的图像上去。

import cv2

# 展示图像的函数
def show(img,name):
    print(name+" : "+str(img.shape))
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 读入图像
img = cv2.imread('../img2/cat2.jpg')

# 在图像上画框
# img => 图片数据;
# left_top => (最左,最上) 是个tuple;
# right_bottom => [最右,最下] 是个tuple;
# (0, 0, 255) => rgb 颜色;
# 2 => 粗细程度
left_top = [300,400]
right_bottom = [1000,800]
cv2.rectangle(img,left_top,right_bottom,(0,0,255),2)
show(img,"cat")

# 裁剪图像
# 0:400是说高度边界 0:800是说宽度边界
img_cj = img[400:800,300:1000]
# 保存图像
cv2.imwrite('../img2/cat_cj.jpg',img_cj)
show(img_cj,"cat_cj")

# 缩放:放大
# None是输出图像的尺寸大小,fx和fy是缩放因子
# cv2.INTER_CUBIC 是插值方法,一般默认为cv2.INTER_LINEAR
temp = 3/2
img_sf1 = cv2.resize(img_cj,None,fx=temp,fy=temp,interpolation=cv2.INTER_CUBIC)
show(img_sf1,"img_sf1")

# 绘制线条
# 绘制点 cv2.circle(image, center_coordinates, radius, color, thickness)
# image:它是要在其上绘制圆的图像。
# center_coordinates:它是圆的中心坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
# radius:它是圆的半径。
# color:它是要绘制的圆的边界线的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
# thickness:它是圆边界线的粗细像素。厚度-1像素将以指定的颜色填充矩形形状。
point_list = [(100, 100), (170, 120), (100, 140), (180, 150),(200, 165)]
for point in point_list:
    cv2.circle(img_sf1, point, 3, (255, 0, 0), 2)

# 这里我写了五个点 存在point_list里 下标是0 1 2 3 4
# 那么连线的话 需要指定连线的起始点 这里我们让0和1 1和2 2和3 3和4
line_maps = {0:1,1:2,2:3,3:4}

# cv2.line(image, start_point, end_point, color, thickness)
# image:它是要在其上绘制线条的图像。
# start_point:它是线的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
# end_point:它是直线的终点坐标。坐标表示为两个值的元组,即(X坐标值ÿ坐标值)。
# color:它是要绘制的线条的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
# thickness:它是线的粗细像素。
for i in line_maps.keys():
    start_point = point_list[i] # 起始点
    end_point = point_list[line_maps[i]] # 终点
    cv2.line(img_sf1,start_point,end_point,(0,255,0),2) # 连线

show(img_sf1,"img_line")

# 缩放:缩小
temp = 2/3
img_sf2 = cv2.resize(img_sf1,None,fx=temp,fy=temp,interpolation=cv2.INTER_CUBIC)
show(img_sf2,"img_sf2")

# 再将缩小后的图片 拼接回原来的图像上
img[400:800,300:1000] = img_sf2
show(img,"img_result")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存