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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 面向python,Opencv学习笔记(二)---2 -> 正文阅读

[人工智能]面向python,Opencv学习笔记(二)---2


前言

要求opencv版本4.1.2.30(4.x >=版本),我的版本4.5.3

一、两图像的像素操作

Opencv4提供了求取两幅图像中较大或者较小灰度值的cv.max,和cv.min,这两个函数依次比较两幅图像中灰度值的大小,保留较大(较小)的灰度值。

dst = cv.max(src1,src2)
dst=cv.min(src1,src2)

src1:第一幅图像.可以是任意通道数的矩阵;
src2:矩阵尺寸和通道数参数与第一个一致;
det:操作后保留的图像

Max_and_min.py 代码示例

import cv2 as cv
import numpy as np

if __name__ =='__main__':
    a = np.array([1,2,3.3,4,5,9,5,7,8.2,9,10,2])
    b = np.array([1,2.2,3,1,3,10,6,7,8,9.3,10,1])
    img1 = np.reshape(a,(3,4))
    img2 = np.reshape(b,(3,4))
    img3 = np.reshape(a,(2,3,2))
    img4 = np.reshape(b,(2,3,2))

    #对两幅单通道图像进行比较
    max12 = cv.max(img1,img2)
    min12 =cv.min(img1,img2)
    
    #对两幅多通道图像进行比较
    max34 = cv.max(img3,img4)
    min34 = cv.min(img3,img4)

    #对两幅彩色图像进行比较
    img5 = cv.imread('./chapter_3/lena.jpg')
    img6 = cv.imread('./chapter_3/flower.jpg')
    max56 = cv.max(img5,img6)
    min56 = cv.min(img5,img6)
    cv.imshow('conmax',max56)
    cv.imshow('conmin',min56)

    #对两幅灰度图像进行比较
    img7 = cv.cvtColor(img5,cv.COLOR_BGR2GRAY)
    img8 = cv.cvtColor(img6,cv.COLOR_BGR2GRAY)
    max78= cv.max(img7,img8)
    min78 = cv.min(img7,img8)
    cv.imshow('conMax_GRAY',max78)
    cv.imshow('conMin_GRAY',min78)

    #与掩码图像进行比较
    #生成一个300x300的低通掩码矩阵
    src = np.zeros((512,512,3),dtype='uint8')
    src[100:400:,100:400:] = 255  #(x1:x2:,y1,y2:)
    min_img5_src = cv.min(img5,src)
    cv.imshow('Min img5 src',min_img5_src)

    #生成一个显示红色通道的低通掩码矩阵
    src1 = np.zeros((512,512,3),dtype='uint8')
    src1[:,:,2] = 255
    min_img5_src1 = cv.min(img5,src1)
    cv.imshow('Min img5 src1',min_img5_src1)

    #关闭窗口
    cv.waitKey(0)
    cv.destroyAllWindows()

运行结果展示:

在这里插入图片描述
在这里插入图片描述

二、两幅图像的逻辑运算

Opencv4针对两幅图像之间的"与" “或” “异或”"非"运算提供了cv.bitwise_and,
cv.bitwise_or,cv.bitwise_xor,cv.bitwise_not函数;
数据类型为uint8的图像中像素值的范围为0~255,逻辑运算时将像素值转化成二进制再进行。

det=cv.bitwise_and(src1,src2)
det=cv.bitwise_or(src1,src2)
det=cv.bitwise_xor(src1,src2)
det=cv.bitwise_not(src)

src1:第一幅图像.可以是任意通道数的矩阵;
src2:矩阵尺寸和通道数参数与第一个一致;
src:输入的掩码
det:操作后保留的图像

1.Logic_Operation.py

import cv2 as cv
import numpy as np
import sys

if __name__ =='__main__':
    #创建两幅黑白图像
    img1 = np.zeros((200,200),dtype='uint8')
    img2 = np.zeros((200,200),dtype='uint8')
    img1[50:150,50:150] = 255
    img2[100:200,100:200] = 255

    img = cv.imread('./chapter_3/lena.jpg')
    if img is None:
        print('Failed to read img')
        sys.exit()
    #进行逻辑运算
    Not = cv.bitwise_not(img1)
    And = cv.bitwise_and(img1,img2)
    Or = cv.bitwise_or(img1,img2)
    Xor = cv.bitwise_xor(img1,img2)
    img_Not = cv.bitwise_not(img)

    cv.imshow('img1',img1)
    cv.imshow('img2',img2)
    cv.imshow('Not',Not)
    cv.imshow('And',And)
    cv.imshow('Xor',Xor)
    cv.imshow('Origin',img)
    cv.imshow('Img_Not',img_Not)
    cv.waitKey(0)
    cv.destroyAllWindows()

结果展示:

在这里插入图片描述
在这里插入图片描述

三.图像的二值化

将非二值化图像经过计算变成二值图像的过程称为图像的二值化或者阈值化。Opencv4提供了cv.threshold()和cv.adaptiveThreshold()两个函数用于实现图像的二值化。

retval,dst = cv.threshold(src,thres,maxval,type)

src:待二值化的图像,数据只能是uint8和float32
thresh:二值化的阈值
maxval:二值化过程中的最大值。只在cv.THRESH_BINARY和cv.THRESH_BINARY_INV两种二值化方法中发挥作用,但在其他方法是也需要输入
type:选择图像二值化方法的标志
det:二值化后的图像
在这里插入图片描述
cv.threshold()函数在全局只使用一个阈值,在实际情况下,由于光照不均匀及阴影的存在,全局只有一个阈值会使得阴影处的白色区域也会被函数二值化成黑色区域,因此cv.adaptiveThresshold()函数提供了两种局部自适应阈值的二值方法,。

dst = cv.adaptiveThreshold(src,
maxValue,
adaptiveMethod,
thresholdType,
blockSize.
C)
src:待二值化图像
maxValue:二值化的最大值
adaptiveMathod:自适应阈值的方法
threshold:图像二值化的方法标志;
blockSize:自适应确定阈值的像素领域大小;
C:从平均值或者加权平均值减去的常数

Threshold.py代码示例:

import cv2 as cv
import numpy as np
import sys
if __name__ =='__main__':
    img = cv.imread('./chapter_3/lena.jpg')
    if img is None:
        print('Failed to read img')
        sys.exit()
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    #彩色图像二值化
    _,img_B=cv.threshold(img,125,125,type=cv.THRESH_BINARY)
    _,img_B_V=cv.threshold(img,125,255,cv.THRESH_BINARY_INV)
    cv.imshow('img_B',img_B)
    cv.imshow('img_B_V',img_B_V)
    #灰度图像二值化
    _,gray_B=cv.threshold(gray,125,255,cv.THRESH_BINARY)
    _,gray_B_V=cv.threshold(gray,125,255,cv.THRESH_BINARY_INV)
    cv.imshow('gray_T',gray_B)
    cv.imshow('gray_T_V',gray_B_V)
    #灰度图像TOZERO变化
    _,gray_T=cv.threshold(gray,125,255,cv.THRESH_TOZERO)
    _,gray_T_V=cv.threshold(gray,125,255,cv.THRESH_TOZERO_INV)
    cv.imshow('gray_T',gray_T)
    cv.imshow('gray_T_V',gray_T_V)
    #灰度图像TRUNC
    _,gray_TRUNC=cv.threshold(gray,125,255,cv.THRESH_TRUNC)
    cv.imshow('gray_TRUNC',gray_TRUNC)
    #灰度图像大津法和三角形法二值化
    img1=cv.imread('./chapter_3/Threshold.png',cv.IMREAD_GRAYSCALE)
    _,img1_O=cv.threshold(img1,100,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
    _,img1_T=cv.threshold(img1,125,255,cv.THRESH_BINARY|cv.THRESH_TRIANGLE)
    cv.imshow('img1',img1)
    cv.imshow('img1_o',img1_O)
    cv.imshow('img1_T',img1_T)
    #灰度图像自适应二值化
    adaptive_mean=cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,13,0)
    adaptive_gauss=cv.adaptiveThreshold(img1,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,13,0)
    cv.imshow('adaptive_mean',adaptive_mean)
    cv.imshow('adaptive_gauss',adaptive_gauss)


    cv.waitKey(0)
    cv.destroyAllWindows()

运行结果展示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:29:17  更:2021-11-09 19:32:24 
 
开发: 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 6:39:02-

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