IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Opencv for python -> 正文阅读

[人工智能]Opencv for python

opencv 简介

强大的图像处理和计算机视觉库,实现了很多实用算法

安装

opencv包安装

opencv-python包(非官方):

pip install opencv-python

官方文档:https://opencv-python-tutroals.readthedocs.io/en/latest/

简单图像处理

图像像素存储形式

首先得了解下图像在计算机中存储形式:
(为了方便画图,每列像素值都写一样了)

对于只有黑白颜色的灰度图,为单通道,
一个像素块对应矩阵中一个数字,数值为0到255,
其中0表示最暗(黑色) ,255表示最亮(白色)
在这里插入图片描述

在这里插入图片描述
对于采用RGB模式的彩色图片,为三通道图,
Red、Green、Blue三原色,
按不同比例相加,
一个像素块对应矩阵中的一个向量, 如[24,180, 50],
分别表示三种颜色的比列,

即对应深度上的数字,如下图所示:

在这里插入图片描述

需要注意的是,由于历史遗留问题,opencv采用BGR模式,而不是RGB

  • Caffe,全称Convolutional Architecture for Fast Feature Embedding,
    是一个兼具表达性、速度和思维模块化的深度学习框架。
    由伯克利人工智能研究小组和伯克利视觉和学习中心开发。

图像读取和写入

  • cv2.imread()
 imread(img_path,flag) 读取图片,返回图片对象

    img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
    flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1
          cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
          cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1
  • cv2.imshow()
 imshow(window_name,img):显示图片,窗口自适应图片大小

    window_name: 指定窗口的名字
    img:显示的图片对象
    可以指定多个窗口名称,显示多个图片
    
waitKey(millseconds)  键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)

    millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件
    
destroyAllWindows(window_name) 

    window_name: 需要关闭的窗口名字,不传入时关闭所有窗口
  • cv2.imwrite()
 imwrite(img_path_name,img)
    img_path_name:保存的文件名
    img:文件对象
  • 使用示例
 #coding:utf-8

import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\roi.jpg")
# print(img.shape)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,img_threshold = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)
cv2.imshow("img",img)
cv2.imshow("thre",img_threshold)

key = cv2.waitKey(0)
if key==27: #按esc键时,关闭所有窗口
    print(key)
    cv2.destroyAllWindows()
cv2.imwrite(r"C:\Users\Administrator\Desktop\thre.jpg",img_threshold)

图像像素获取和编辑

  • 像素值获取:
 img = cv2.imread(r"C:\Users\Administrator\Desktop\roi.jpg")

#获取和设置
pixel = img[100,100]  #[57 63 68],获取(100,100)处的像素值
img[100,100]=[57,63,99] #设置像素值
b = img[100,100,0]    #57, 获取(100,100)处,blue通道像素值
g = img[100,100,1]    #63
r = img[100,100,2]      #68
r = img[100,100,2]=99    #设置red通道值

#获取和设置
piexl = img.item(100,100,2)
img.itemset((100,100,2),99)
  • 图片性质
 import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\roi.jpg")

#rows,cols,channels
img.shape   #返回(280, 450, 3),280(rows),长450(cols)3通道(channels)
#size
img.size    #返回378000,所有像素数量,=280*450*3
#type
img.dtype   #dtype('uint8')
  • ROI截取(Range of Interest) 矩形和多边形
 #ROI,Range of instrest
roi = img[100:200,300:400]  #截取100行到200行,列为300400列的整块区域
img[50:150,200:300] = roi   #将截取的roi移动到该区域 (50100行,200300列)
b = img[:,:,0]  #截取整个蓝色通道

b,g,r = cv2.split(img) #截取三个通道,比较耗时
img = cv2.merge((b,g,r))
  • 添加边界(padding)
 cv2.copyMakeBorder()
    参数:
        img:图像对象
        top,bottom,left,right: 上下左右边界宽度,单位为像素值
        borderType:
            cv2.BORDER_CONSTANT, 带颜色的边界,需要传入另外一个颜色值
            cv2.BORDER_REFLECT, 边缘元素的镜像反射做为边界
            cv2.BORDER_REFLECT_101/cv2.BORDER_DEFAULT
            cv2.BORDER_REPLICATE, 边缘元素的复制做为边界
            CV2.BORDER_WRAP
        value: borderType为cv2.BORDER_CONSTANT时,传入的边界颜色值,如[0,255,0]
  • 使用示例:
 #coding:utf-8


import cv2 as cv
import matplotlib.pyplot as plt

img2 = cv.imread(r"C:\Users\Administrator\Desktop\dog.jpg")
img = cv.cvtColor(img2,cv.COLOR_BGR2RGB)  #matplotlib的图像为RGB格式
constant = cv.copyMakeBorder(img,20,20,20,20,cv.BORDER_CONSTANT,value=[0,255,0]) #绿色
reflect = cv.copyMakeBorder(img,20,20,20,20,cv.BORDER_REFLECT)
reflect01 = cv.copyMakeBorder(img,20,20,20,20,cv.BORDER_REFLECT_101)
replicate = cv.copyMakeBorder(img,20,20,20,20,cv.BORDER_REPLICATE)
wrap = cv.copyMakeBorder(img,20,20,20,20,cv.BORDER_WRAP)
titles = ["constant","reflect","reflect01","replicate","wrap"]
images = [constant,reflect,reflect01,replicate,wrap]

for i in range(5):
    plt.subplot(2,3,i+1),plt.imshow(images[i]),plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述

https://www.cnblogs.com/silence-cho/p/10926248.html

在这里插入图片描述

 import cv2
import matplotlib.pyplot as plt


img =cv2.imread(r"F:\1.jpg")

# print(type(img))
# print(img.shape)

'''
<class 'numpy.ndarray'>
(675, 1200, 3)
'''

img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#matplotlib的图像为RGB格式

content = cv2.copyMakeBorder(img_gray,20,20,20,20,cv2.BORDER_CONSTANT,value=[0,255,0])

ret,thre1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)

cv2.imshow("gray",thre1)


title = ["normal","gray","se"]
imgs= [img,img_gray,thre1]

for i in range(3):
    plt.subplot(2,2,i+1),plt.imshow(imgs[i],"gray")
    plt.title(title[i])
    plt.xticks([]),plt.yticks([])
plt.show()




key = cv2.waitKey(0)
if key ==27:
    print(key)
    cv2.destroyAllWindows()




# https://blog.csdn.net/u010451780/article/details/106729827

# net = cv2.dnn.readNetFromCaffe()
# 用于读取已经训练好的caffe模型
# 参数说明: 1表示caffe网络的结构文本,2表示已经训练好的参数结果
# https://www.cnblogs.com/my-love-is-python/p/10455812.html

# https://www.baidu.com/s?ie=utf8&oe=utf8&wd=caffe%E6%A8%A1%E5%9E%8B%20%20openpose&tn=98010089_dg&ch=3

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:40:43  更:2021-12-16 17:43:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 0:46:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码