• 图片的读取和展示
import cv2
img = cv2.imread('1.jpg')
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

其中cv2.waitKey(0)代表图片的停留时间,0:表示手动关闭。cv2.waitKey(1000)表示过1000ms自动关闭

把展示定义为方法,方便使用

def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 视频的读取和展示
vc = cv2.VideoCapture('test.mp4')
if vc.isOpened():
open,frame = vc.read()
else:
open = False
while open:
open,res = vc.read()
if res is None:
break
else:
gray = cv2.cvtColor(res,cv2.COLOR_BGR2GRAY)
cv2.imshow('res',gray)
if cv2.waitKey(10) & 0xFF == 27:
break

其中cv2.cvtColor()是对图像进行色彩空间的转换函数,利用cv2.COLOR_BGR2GRAY得到灰度图gray

  • 图片切片

  和数组,列表切片类似

img = cv2.imread("1.jpg")
cat = img[0:50,20:70]
cv_show("cat",cat)
  • 提取颜色通道

    1.利用split函数

img = cv2.imread('1.jpg')
b,g,r = cv2.split(img)

    2.利用shape的第三个值

img = cv2.imread("1.jpg")
r = img[:,:,0]
g = img[:,:,1]
b = img[:,:,2]

    改变颜色

#复制一个img2副本
img2 = cv2.copy(img)
#蓝色通道置为0
img2[:,:,0] = 0
#绿色通道置为0
img2[:,:,1] = 0
#只剩红色通道的图片
cv_show('img2',img2)
  • 边界填充

    BORDER_REPLICATE:复制法,即复制最边缘的像素。例如:aaaa|abcdefg|ggggg

    BORDER_REFLECT:反射法,即以最边缘的像素为对称轴。例如:fedcba|abcdefg|gfedec

    BORDER_REFLECT_101:反射法,也是最边缘的像素为对称轴,但与BORDER_REFLECT有区别。例如:   fedcb|abcdefg|fedec

    BORDER_WRAP:外包装法,即以图像的左边界与右边界相连,上下边界相连。例如:cdefgh|abcdefgh|abcdefg

    BORDER_CONSTANT:常量法。

img = cv2.imread('D:\Python\Pic\dog.jpg')
top_size,bottom_size,left_size,right_size =(50,50,50,50,)
replicate = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
replicate = cv2.cvtColor(replicate,cv2.COLOR_BGR2GRAY)
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_CONSTANT,value = 0) #cv2是bgr,plt是rgb,调整以便让plt显示img原图
b,g,r = cv2.split(img)
img = cv2.merge((r,g,b)) plt.subplot(231),plt.imshow(img),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('replicate')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('reflect')
plt.subplot(234),plt.imshow(reflect101),plt.title('reflect101')
plt.subplot(235),plt.imshow(wrap),plt.title('wrap')
plt.subplot(236),plt.imshow(constant),plt.title('constant') plt.show()

  • 图像融合

  把两张图片进行融合,由于两张图片shape不同,先cv2.resize()重置其中一张图片的shape,使得两张图片有相同的shape,再利用cv2.addWeighted进行融合

img1 = cv2.imread('1.jpg')
img2 = cv2.imread('test.jpg')
a,b,c = img1.shape
print(img1.shape)
img2 = cv2.resize(img2,(b,a))
print(img2.shape)
res = cv2.addWeighted(img1,0.6,img2,0.4,0)
cv_show('res',res)

OpenCv基础_一的更多相关文章

  1. OpenCv基础_四

    Harris角点检测 理解 内部点:蓝框所示,无论滑动窗口水平滑动还是竖直滑动,框内像素值都不会发生大的变化 边界点:黑框所示,滑动窗口沿着某一个方向滑动框内像素点不会发生大的改变,但是沿着另一个方向 ...

  2. OpenCv基础_三

    轮廓检测 图像金字塔 上采样,图像变大一倍,矩阵用0填充 img = cv2.imread('1,jpg') cv_show('img',img) up = cv2.pyrUp(img) cv_sho ...

  3. OpenCV基础_二

    阈值和平滑处理 cv2.threshold()二值化函数 ret,thresh = cv2.threshold(src, thresh, maxval, type[, dst]) 参数 src:所要进 ...

  4. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

  5. 什么是图像 -- opencv基础

    opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像: ...

  6. Flutter实战视频-移动电商-05.Dio基础_引入和简单的Get请求

    05.Dio基础_引入和简单的Get请求 博客地址: https://jspang.com/post/FlutterShop.html#toc-4c7 第三方的http请求库叫做Dio https:/ ...

  7. Flutter实战视频-移动电商-08.Dio基础_伪造请求头获取数据

    08.Dio基础_伪造请求头获取数据 上节课代码清楚 重新编写HomePage这个动态组件 开始写请求的方法 请求数据 .但是由于我们没加请求的头 所以没有返回数据 451就是表示请求错错误 创建请求 ...

  8. [Zlib]_[0基础]_[使用zlib库压缩文件]

    场景: 1. WIndows上没找到系统提供的win32 api来生成zip压缩文件, 有知道的大牛麻烦留个言. 2. zlib比較经常使用,编译也方便,使用它来做压缩吧. MacOSX平台默认支持z ...

  9. OpenCV基础篇之读取显示图片

    程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...

随机推荐

  1. 汉明码、海明校验码(Hamming Code)

    目录 基础知识 汉明码/海明校验码 计算 基础知识 码距:又叫海明距离,是在信息编码中,两个编码之间对应位上编码不同的位数.例如编码100110和010101,第1.2.5.6位都不相同,所以这两个编 ...

  2. LeetCode随缘刷题之字符串转换整数

    package leetcode.day_01_29; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 请你 ...

  3. 总结Tomcat优化方法

    一.内存空间优化 配置文件目录:/usr/local/tomcat/bin/catalina.sh JAVA_OPTS="-server -Xms4g -Xmx4g -XX:NewSize= ...

  4. Oracle 获取表注释和列注释

    全部表 select table_name from user_tables; //当前用户拥有的表 select table_name from all_tables; //所有用户的表 selec ...

  5. linux 运维工程师如何降低工作难度

    文章目录 1.Linux "优化" 2.git "优化" 3.mysql "优化" 4.kubernetes "优化" ...

  6. 生成式AI会成为是人工智能的未来吗

    生成式 AI 是一项创新技术,可帮助算法人员生成以前依赖于业务员的模型,提供创造性的结果,而不会因业务员思想和经验而产生任何差错. 人工智能中的这项新技术确定了输入的原始模型,以生成演示训练数据特征. ...

  7. 解决方案:ipv4地址手动设置之后关掉推出再打开就没了(静态Ip设置好之后又自动变动态IP)

    解决方案:ipv4地址手动设置之后关掉推出再打开就没了(静态Ip设置好之后又自动变动态IP) 1.情况说明:修改好IP,关掉窗口后,又变成 自动获取IP (如图二) 2.解决方案: 1)调出 服务和应 ...

  8. windbg调试命令

    重要 (1) windbg命令分为标准命令(40个左右),元命令(一百多个)和扩展命令. 标准命令提供最基本的调试功能,不区分大小写.如:bp g dt dv k等 元命令提供标准命令没有提供的功能, ...

  9. selenium+python自动化106 - 滑动 iframe 上的滚动条

    前言 页面嵌套了iframe,这个iframe又是可以滚动的,如何操作iframe上的滚动条? 示例 写一个html页面案例,源码如下 <!DOCTYPE html> <html l ...

  10. Docker入坑系列(一)

    Docker入坑系列(一) 引用嘛,当然是来引用别人说的东西啦. Docker 是一个开源项目,诞生于 2013 年初,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux ...