OpenCV Python教程

主要使用功能:

1.图像的载入、显示和保存

2.目标检测给图像加方框和对应的置信度(文字)并获得裁剪区域, 在裁剪区域叠加水印

 

运行环境 python3

1.安装:https://blog.csdn.net/liuweiyuxiang/article/details/80591640

 

重点命令:

* 1.cv2.imread 读取图像

img = cv2.imread(filename)

* 2.cv2.rectanle 加方框

cv2.rectangle(img,(int(sx1),int(sy1)),(int(sx2),int(sy2)),(0,255,0),3)

# 输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细

cv2.rectangle(img, (x,y), (x+w,y+h), (B,G,R), Thickness)

* 3.cv2.putText 加文字

cv2.putText(img, text, (int(sx1),int(sy1-6)), cv2.FONT_HERSHEY_COMPLEX_SMALL,0.8, (0, 255, 0) )

# 输入参数为图像、文本、位置、字体、大小、颜色数组、粗细

cv2.putText(img, text, (x,y), Font, Size, (B,G,R), Thickness)

* 4.cv2.write 保存处理后的图像(JPG, PNG)

注意: cv2.write的参数为3个(“save_filename”, img, [save_type, quality_level])

其中:save_type为jpg或png

当为存储为jpg时,save_type设置为cv2.IMWRITE_JPEG_QUALITY, quality_score从0~100,分数越大,表明质量u越好,当不选择第三个参数时,默认保存的质量分数为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。下面是以不同质量存储的两幅图:

# 针对jpg
# 不设置质量分数,默认为95
cv2.imwrite('new.jpg', img)

# 设置为质量分数,假设设置为100
cv2.imwrite('new.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3:

# 设置压缩等级为0
cv2.imwrite("new.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])

# 设置压缩等级为9 
cv2.imwrite("new.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

* 5. cv2.resize 修改图像的大小

利用opencv中的cv2.resize可以实现将原始图变换为指定的尺寸:、

三个参数:cv2.resize(源图像,目标大小,变换方法)

其中目标大小为元组,指定宽度和高度,width 与 height, (w, h)

变换方法:

CV_INTER_NEAREST:最近邻插值,  

CV_INTER_LINEAR:双线性插值 (缺省使用)  

CV_INTER_AREA:使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_ NEAREST方法..  

CV_INTER_CUBIC:立方插值.  

image=cv2.imread('test.jpg')
res=cv2.resize(image,(32,32),interpolation=cv2.INTER_CUBIC)

* 6. cv2.imshow 显示处理后的图像

cv2.imshow('001_new.jpg', img)

cv2.waitKey(0)  # 鼠标点击图像 按空格键退出显示

cv2.destroyAllWindows() 

二.根据坐标获得裁剪区域

在上一步得到对应的坐标(x1,x2,y1,y2)之后,想将框出来的区域取出来,这点在Matlab中是比较好实现,opencv同样可以做一样的事情,稍微有点区别。

hight = y2 - y1
width = x2 - x1
cropImg = image[y1:y1+hight, x1:x1+width]

可以看到,image[],左边是y坐标范围(从上到下坐标增大),右边是x坐标范围(从左到右坐标增大),与matlab相反,cropImg就代表想要的像素区域。

如果想循环读取:

for i in range(1,201):
    if i==169 or i==189: 
       i = I+1
    pth="C:\\Users\\Desktop\\asd\\"+str(i)+".bmp" 
  image = cv2.imread(pth)            //从指定路径读取图像    
  cropImg = image[600:1200,750:1500] //获取感兴趣区域                                                                      cv2.imwrite("C:\\Users\\Desktop\\qwe\\"+str(i)+".bmp",cropImg) //保存到指定目录


三.在裁剪区域叠加水印

import cv2
img = cv2.imread('person.jpg')
logo = cv2.imread('logo.jpg')
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
rows, cols, channels = logo.shape
sx1 = 202
sx2 = 258
sy1 = 241
sy2 = 325

dy = round((sx1 + sx2) / 2.0)
dx = round((sy1 + sy2) / 2.0)
roi = img[dx:dx+rows, dy:dy+cols]
cv2.rectangle(img, (int(sx1), int(sy1)), (int(sx2), int(sy2)), (0, 255, 0), 3)
for i in range(rows):
    for j in range(cols):
        if (int(logo[i, j][0]) + int(logo[i, j][1]) + int(logo[i, j][2])) <= 20:
            roi[i, j] = roi[i, j]
        else:
            roi[i, j] = logo[i, j]
roi = cv2.addWeighted(logo, 0.5, roi, 0.5, 1)
# roi=cv2.add(logo, roi)
cv2.imshow('001_new.jpg', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

检测出裤子,并添加logo图

 

参考:

 https://blog.csdn.net/xieqiaokang/article/details/60780608

 https://jingyan.baidu.com/article/d5a880ebdd962f13f147ccb9.html

 

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以参考OpenCV-Python的官方教程来学习如何使用OpenCV-Python教程中使用了Numpy作为依赖项,并推荐使用Matplotlib和IPython进行绘图和交互式编程。教程还会不断扩展,如果你熟悉某个特定的算法,并且能够编写一个教程,包括算法的基本理论和示例代码,可以参与到项目中来。此外,还提供了一些附加资源,包括Python快速指南、Numpy基础教程、Numpy示例列表、OpenCV文档和OpenCV论坛。在Windows中安装OpenCV-Python也有相应的指南可供参考。总的来说,OpenCV-Python教程适合用于Python原型开发,并介绍了如何在Python中使用OpenCV图形库以及与C调用相应OpenCV函数的不同之处。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [OpenCV-Python (官方)中文教程(部分一)](https://blog.csdn.net/Thomson617/article/details/103956799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [OpenCV-Python教程(11、轮廓检测)](https://blog.csdn.net/sunny2038/article/details/12889059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值