opencv3

文章目录

  • opencv3
    • 1.图像加权和
    • 2.图像加密与解密
    • 3.数字水印
    • 4.色彩空间类型转换
    • 5.dst = cv2.inRange(src, lowerb, upperb)
    • 6.将指定颜色查找出来,然后利用基于掩码的按位与运算将指定颜色提取出来
    • 7.alpha通道,表示透明度。RGBA色彩空间,有四个通道
    • 8.缩放
    • 9.翻转
    • 10.仿射

1.图像加权和

即算上每幅图像的权重

import cv2
import numpy as np
img1 = np.ones((3,4), dtype=np.uint8)*100
# 生成一个3*4的大小,元索值都是100的二维数组
img2 = np.ones((3,4), dtype=np.uint8)*10
gamma = 3 # 亮度调节参数
img3 = cv2.addWeighted(img1, 0.6, img2, 5,gamma)
print(img3)

2.图像加密与解密

通过按位异或

运算加密过程:将明文a与密钥b进行按位异或,完成加密,得到密文c。

解密过程:将密文c与密钥b进行按位异或,完成解密,得到明文a。

示例:随机生成一副图像作为密钥

import cv2
import numpy as np
lena = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0228.JPG",0)
cv2.imshow("lena", lena)
cv2.waitKey()
print(lena)
r, c = lena.shape
key = np.random.randint(0,256,size=[r,c],dtype=np.uint8)
encryption = cv2.bitwise_xor(lena, key)
decryption = cv2.bitwise_xor(encryption,key)
cv2.imshow("lena", lena)
cv2.imshow("key",key)
cv2.imshow("encryption",encryption)
cv2.imshow("decryption",decryption)
cv2.waitKey()
cv2.destroyAllWindows()

3.数字水印

将载体图像的最低有效位层替换为当前需要隐藏的二值图像,从而实现将二值图像隐藏的目的。

import cv2
import numpy as np
# 读取原始载体图像
lena = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0239.bmp",0)
# 读取水印图像
watermark = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0239.bmp", 0)
# 将水印图像内的值255处理为1,以方便嵌入
w = watermark[:, :]>0
watermark[w] = 1
# 读取原始载体图像是shape值
r, c = lena.shape
# =================嵌入过程===============
# 生成元素值都是254的数组
t254 = np.ones((r, c), dtype=np.uint8)*254
# 获取lena图像的高七位
lenaH7 = cv2.bitwise_and(lena, t254)
# 将watermark嵌入lenaH7内
e = cv2.bitwise_or(lenaH7, watermark)
# =================提取过程===============
# 生成元素值都是1的数组
t1 = np.ones((r, c), dtype=np.uint8)
# 从载体图像内提取水印图像
wm = cv2.bitwise_and(e, t1)
print(wm)
# 将水印图像内的值1 处理为255,以方便显示
w = wm[:, :]>0
wm[w] = 255
# ==================显示================
cv2.imshow("lena", lena)
cv2.imshow("watermark", watermark*255)
cv2.imshow("e", e)
cv2.imshow("wm", wm)
cv2.waitKey()
cv2.destroyAllWindows()

4.色彩空间类型转换

将图像从一个色彩空间转换到另一个色彩空间。例如,将RGB色彩空间和HSV色彩空间之间进行转换

cv2.cvtColor()

代码示例

import cv2
import numpy as np
img = np.random.randint(0, 256,size=[2, 4, 3], dtype=np.uint8)
rst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print("img = \n", img)
print("rst = \n", rst)
print("像素点(1,0)直接计算得到的值=",img[1,0,0]*0.114+img[1,0,1]*0.587+img[1,0,2]*0.299)
print("像素点(1,0)使用公式cv2.cvtColor()转化值=" ,rst[1,0])

将灰度图像转化为BGR图像

import cv2
import numpy as np
img = np.random.randint(0, 256,size=[20, 40],dtype=np.uint8)
rst = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
cv2.imshow("i",img)
cv2.imshow("r",rst)
cv2.waitKey()
cv2.destroyAllWindows()

将图像在BGR模式和灰度图像之间相互转化

import cv2
lena = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0239.bmp")
gray = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)
rgb = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
# ===============show shape================
print("lena.shape=", lena.shape)
print("gray.shape=", gray.shape)
print("rgb.shape=", rgb.shape)
# ================show img=================
cv2.imshow("lena", lena)
cv2.imshow("gray", gray)
cv2.imshow("rgb", rgb)
cv2.waitKey()
cv2.destroyAllWindows()

将图像从BGR转化到RGB模式

import cv2
lena = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0239.bmp")
rgb = cv2.cvtColor(lena, cv2.COLOR_BGR2RGB)
cv2.imshow("lena", lena)
cv2.imshow("rgb", rgb)
cv2.waitKey()
cv2.destroyAllWindows()

5.dst = cv2.inRange(src, lowerb, upperb)

dst:表示输出结果

src:表示要检查的数组或图像

lowerb:表示范围下界

upperb:表示范围上届

(如果,src值处于该指定区间内,则dst中对应位置上的值为255,否则为0)将某图像在[100, 200]内的值标记出来

import cv2
import numpy as np
img = np.random.randint(0,256,size=[500,500],dtype=np.uint8)
min = 100
max = 200
mask = cv2.inRange(img, min,max)
cv2.imshow("1",img)
cv2.imshow("2",mask)
cv2.waitKey()
cv2.destroyAllWindows()

6.将指定颜色查找出来,然后利用基于掩码的按位与运算将指定颜色提取出来

import cv2
import numpy as np
opencv = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0228.JPG")
hsv = cv2.cvtColor(opencv,cv2.COLOR_BGR2HSV)
cv2.imshow("opencv", opencv)
# =====================指定蓝色值的范围====================
minBlue = np.array([110, 50, 50])
maxBlue = np.array([130, 255, 255])
# 确定蓝色区域
mask = cv2.inRange(hsv, minBlue, maxBlue)
# 通过掩码控制的按位与运算,锁定蓝色区域
blue = cv2.bitwise_and(opencv,opencv, mask=mask)
cv2.imshow("blue", blue)
# ===================指定绿色值的范围======================
minGreen = np.array([50, 50, 50])
maxGreen = np.array([70, 255, 255])
# 确定绿色区域
mask = cv2.inRange(hsv,minGreen, maxGreen)
# 通过掩码控制的按位与运算,锁定绿色区域
green = cv2.bitwise_and(opencv, opencv, mask=mask)
cv2.imshow("green",green)
# =================指定红色值的范围=======================
minRed = np.array([0, 50, 50])
maxRed = np.array([30, 255, 255])
# 确定红色区域
mask = cv2.inRange(hsv, minRed, maxRed)
# 通过掩码控制的按位与运算,锁定红色区域
red = cv2.bitwise_and(opencv, opencv, mask=mask)
cv2.imshow("red", red)
cv2.waitKey()
cv2.destroyAllWindows()

7.alpha通道,表示透明度。RGBA色彩空间,有四个通道

8.缩放

#dst = cv2.resize(scr, dsize[, fx[, fy[, interpolation]]])import cv2
img = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0239.bmp")
rows, cols = img.shape[: 2]
size = (int(cols*0.4), int(rows*0.4))
rst = cv2.resize(img, size)
cv2.imshow("img", img)
cv2.imshow("rst", rst)
cv2.waitKey()
cv2.destroyAllWindows()

9.翻转

#dst = cv2.flip(src, flipCode)
#(旋转类型就是绕着x,y(镜像)还是xy轴旋转)import cv2
img = cv2.imread("C:/Users/Lenovo/PycharmProjects/pythonProject3/IMG_0239.bmp")
x = cv2.flip(img, 0)
y = cv2.flip(img, 1)
xy = cv2.flip(img, -1)
cv2.imshow("img", img)
cv2.imshow("x", x)
cv2.imshow("y", y)
cv2.imshow("xy", xy)
cv2.waitKey()
cv2.destroyAllWindows()

10.仿射

实现平移、旋转,其保持平直性和平行性

#cv2.warpAffine()
#dst(x,y) = src(M11x+M12y+M13, M21x+M22y+M23)
#dst = cv2.warpAffine(src(原图像), M, dsize[, flags[, borderMode[, borderValue]]])

OpenCV函数用法详解21~30,含代码示例,可直接运行相关推荐

  1. OpenCV函数remap详解

    OpenCV函数remap详解 remap的作用是将原影像映射到目标影像的函数. 这是OpenCV文档中的说明. 但这个描述给人的感觉是,云里雾里,到底是需要计算目标到原的映射关系,还是原到目标的映射 ...

  2. C++ copy()函数用法详解(深入了解,一文学会)

    C++ 算法 copy() 函数用于将容器 [first,last] 的所有元素从结果开始复制到不同的容器中. 本文介绍了copy.strcpy.strncpy.memcpy.copy_n.copy_ ...

  3. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  4. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  5. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  6. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

  7. mysql: union / union all / 自定义函数用法详解

    mysql: union / union all http://www.cnblogs.com/wangyayun/p/6133540.html mysql:自定义函数用法详解 http://www. ...

  8. python中mat函数_Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...

  9. ROW_NUMBER() OVER()函数用法详解

    今天同事问了一个关于插入表的问题,对象:被插入表sys_equi_disorg   A  , 查询表sys_equi_dict   B 因为A表的ID不是自增的,并且不能更改表结构,主键默认值还是0, ...

最新文章

  1. 零编程基础学python-如果是一个纯0编程基础的小白,如何学Python
  2. 【打CF,学算法——二星级】Codeforces Round #313 (Div. 2) B. Gerald is into Art(水题)...
  3. 最优化方法系列:Adam+SGD-AMSGrad
  4. 恢复快速启动栏里的“显示桌面”图标
  5. FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法
  6. SSH客户端常用工具SecureCRT操作
  7. js根据已知数组长度创建一个一样长度的数组并初始化值为0
  8. 【工作技巧】WinRAR去除广告
  9. 通过日志对内存泄漏的检查
  10. 浅谈ARP攻击现象和处理办法
  11. 写给喜欢单片机的初学者
  12. 服务端验证防水墙验证码向远程发送请求并验证的方法
  13. python开头编码cc手_python 利用cip.cc查询IP归属地
  14. 码神军训(四,五)——代码跳舞军体拳
  15. 最新全国手机号码归属地信息SQLite数据库2019年2月更新
  16. IDM移动端功能升级说明
  17. ERP系统-应收应付子系统-应付/应收报表
  18. Ubuntu系统下U盘变成只读文件系统的处理办法
  19. 三国志9攻略 修行 兵法
  20. matlab手写板,手写MNISTmatlab实现

热门文章

  1. 读博士(工作)前要了解的20件事
  2. 小学是不是可以用计算机,小学生怎样利用计算机学习
  3. 免费的XShell替代品FinalShell介绍
  4. Gatsby静态网站导航高亮
  5. 完美解决Visio中MathType公式变形的问题以及visio图转pdf之后公式不显示的问题
  6. 洛谷 P3799 妖梦拼木棒【枚举/组合数学】
  7. Mac中在Finder里面打开终端
  8. socks5 速度测试_11月27日Socks5网络游戏代理测试[每日更新中]
  9. 使用python进行“中文词频分析”学习笔记
  10. 三角形面积外接圆内切圆