OpenCV图像处理基础_CodingPark编程公园
发布日期:2021-06-29 15:46:42 浏览次数:3 分类:技术文章

本文共 5265 字,大约阅读时间需要 17 分钟。

文章介绍

本文讲述如何使用Python + OpenCV完成对图像的基本处理

OpenCV图像处理基础

  1. OpenCV 安装
  2. 图像处理基础入门
  3. 像素处理
  4. 使用numpy访问像素
  5. 获取图像属性
  6. ROI感兴趣区域
  7. 通道拆分与合并

OpenCV 安装

• 1.安装Anaconda

• 2.下载opencv3
• 3.安装opencv3

安装Anaconda

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

在这里插入图片描述

下载opencv3

(1)  https://pypi.org/project/opencv-python/#files (2)  直接在Conda 环境下 pip install OpenCV  [这种方法省事儿 下载安装一键搞定]

在这里插入图片描述

安装opencv3

(1)在“Anaconda Prompt”内使用语句:pip install 完整路径文件名	  (2) 直接在Conda 环境下 pip install OpenCV  [这种方法省事儿 下载安装一键搞定]

在这里插入图片描述

验证安装结果

在这里插入图片描述

测试环境【读入图像+显示图像】

测试代码

# -*- coding: utf-8 -*-import cv2i=cv2.imread("E:\\lesson\\image\\test.png")cv2.imshow("Demo",i)cv2.waitKey(0)cv2.destroyAllWindows()cv2.imwrite("E:\\lesson\\image\\lesson1.png",i)

读入图像

i = cv2.imread(文件名,显示控制参数)
显示控制参数
cv.IMREAD_UNCHANGED
cv.IMREAD_GRAYSCALE
cv.IMREAD_COLOR

显示图像

cv2.imshow(窗口名,图像名)

cv2.waitKey(delay)

delay:
delay>0 等待delay毫秒
delay<0 等待键盘单击
delay=0 无限等待

cv2.destroyAllWindows() 删除所有窗口

保存图像

cv2.imwrite(文件地址,文件名)

显示结果

在这里插入图片描述

图像处理基础入门

二值图像

在这里插入图片描述

灰度图像

在这里插入图片描述

彩色图像

在这里插入图片描述

在这里插入图片描述

RGB转灰度

在这里插入图片描述

灰度转二值

在这里插入图片描述

使用OpenCV访问像素

读取像素

• 灰度图像,返回灰度值。

p=img[88,142]
print( p )

• BGR图像,返回值为B,G,R 的值。

分通道
blue=img[78,125,0]
print(blue)
green=img[78,125,1]
print(green)
red=img[78,125,2]
print(red)

全通道

p=img[78,125]
print§

修改像素

• 灰度图像

print(img[88,99]) //查看原有值
img[88,99]=255
print(img[88,99])

• BGR图像

分通道
print(img[88,99,0]) //查看原有值
print(img[88,99,1]) //查看原有值
print(img[88,99,2]) //查看原有值
img[88,99,0]=255
img[88,99,1]=255
img[88,99,2]=255
print(img[88,99,0])
print(img[88,99,1])
print(img[88,99,2])

全通道

print(img[88,99)
img[88,99]=[255,255,255]
print(img[88,99)

灰度图像-代码实现

读取+修改

# -*- coding: utf-8 -*-import cv2i=cv2.imread("image\\lena256.bmp",cv2.IMREAD_UNCHANGED)#请确保当前目录下有灰度图像lena256.bmp'''print(i[100,100])i[100,100]=255print(i[100,100])'''p=i[100,100]print(p)i[100,100]=255p=i[100,100]print(p)

彩色图像-代码实现

读取+修改

# -*- coding: utf-8 -*-import cv2i=cv2.imread("e:\\lesson\\image\\lenacolor.png",cv2.IMREAD_UNCHANGED)# 请确保在指定目录下有彩色图像文件# 更改一个通道print(i[100,100])i[100,100,0]=255print(i[100,100])'''同时更改三个通道print(i[100,100])i[100,100]=[255,255,255]print(i[100,100])''''''更改一个像素块cv2.imshow("original",i)i[100:150,100:150]=[0,0,255]cv2.imshow("result",i)cv2.waitKey(0)cv2.destroyAllWindows()'''

使用numpy访问像素

读取像素

返回值=图像.item(位置参数)

•灰度图像,返回灰度值

p=img.item(88,142)
print( p )

• BGR图像,返回值为B,G,R 的值

blue=img.item(78,125,0)
green=img.item(78,125,1)
red=img.item(78,125,2)
print(blue)
print(green)
print(red)

修改像素

图像名.itemset(位置,新值)

• 灰度图像

print(img.item(88,99))
img.itemset((88,99),255)
print(img.item(88,99))

• BGR图像

print(img.item(88,99,0))
print(img.item(88,99,1))
print(img.item(88,99,2))
img.itemset((88,99,0),255)
img.itemset((88,99,1),255)
img.itemset((88,99,2),255)
print(img.item(88,99,0))
print(img.item(88,99,1))
print(img.item(88,99,2))

灰度图像-代码实现

读取+修改

import cv2import numpy as npi=cv2.imread("image\lena256.bmp",cv2.IMREAD_UNCHANGED)print(i.item(100,100))i.itemset((100,100),255)print(i.item(100,100))

彩色图像-代码实现

读取+修改

import cv2import numpy as npi=cv2.imread("image\lenacolor.png",cv2.IMREAD_UNCHANGED)'''print(i.item(100,100,0))i.itemset((100,100,0),255)print(i.item(100,100,0))print(i.item(100,100,1))i.itemset((100,100,1),255)print(i.item(100,100,1))'''print(i.item(100,100,2))i.itemset((100,100,2),255)print(i.item(100,100,2))

获取图像属性

• 1 形状:行、列、通道数

• 2 像素数目
• 3 图像的数据类型

形状

• shape 可以获取图像的形状,返回包含行数,列数,通道数的元组。

灰度 返回行数,列数
彩色 返回行数,列数,通道数
范例

import cv2

img1=cv2.imread(‘灰度图像’)
print(img1.shape)
=> (512,512)

import cv2

img2=cv2.imread(‘彩色图像’)
print(img2.shape)
=> (512,512, 3) //512行,512列, 3个通道

像素数目

• size 可以获取图像的像素数目。

灰度 返回:行数列数
彩色 返回:行数
列数*通道数

import cv2

img=cv2.imread(‘图像名’)
print(img.size)
=> 786432

图像类型

• dtype 返回的是图像的数据类型。

范例

import cv2
img=cv2.imread(‘图像名称’)
print(img.dtype)
=> uint8

图像属性-代码实现

import cv2a=cv2.imread("image\lena256.bmp",cv2.IMREAD_UNCHANGED)b=cv2.imread("image\lenacolor.png",cv2.IMREAD_UNCHANGED)print(a.shape)print(b.shape)print(a.size)print(b.size)print(a.dtype)print(b.dtype)

ROI感兴趣区域

• ROI(region of interest),感兴趣区域

在这里插入图片描述

import cv2import numpy as npwomen = cv2.imread('./img/women.png')girl = cv2.imread('./img/girl.bmp')i = np.ones((1, 1, 3))			# 基底i = women[220:400, 250:350]         # 看样子 i能被 瞬间撑大print('i -> ', i)'''⚠️特别注意有区域规定时 [180:360, 100:200] -> 则需要完全按规定区域大小办事'''# girl = i            # 二选一girl[180:360, 100:200] = i      # 二选一# cv2.imshow('women', women)cv2.imshow('girl', girl)cv2.waitKey(-1)             # 等待键盘单击cv2.destroyAllWindows()

通道 拆分与合并

通道拆分

.split()

其实在【两种方法】访问像素时,我们已经做过逐个通道的研究了

这里算是提供一种新的 拆分 合并 手法

OpenCV中我们曾用过

• import cv2
• img=cv2.imread(‘图像名’)
• b = img[ : , : , 0 ]
• g = img[ : , : , 1 ]
• r = img[ : , : , 2 ]

如今

• import cv2
• img=cv2.imread(‘图像名’)
• b , g , r = cv2.split(img)

在这里插入图片描述

在这里插入图片描述

通道合并

.merge()

⚠️通道顺序 要注意

拆分-代码实现

import cv2women = cv2.imread('img/women.png')b, g, r = cv2.split(women)cv2.imshow('org', women)cv2.imshow('B', b)cv2.imshow('G', g)cv2.imshow('R', r)cv2.waitKey(0)cv2.destroyAllWindows()

合并-代码实现

import cv2import numpy as npa=cv2.imread("image\lenacolor.png")b,g,r=cv2.split(a)bgr=cv2.merge([b,g,r])cv2.imshow("bgr",bgr)cv2.waitKey()cv2.destroyAllWindows()
'''蓝色与0 0合并下标法b = split(a)[0]'''import cv2import numpy as npa=cv2.imread("image\lenacolor.png")rows,cols,chn=a.shapeb=cv2.split(a)[0]g = np.zeros((rows,cols),dtype=a.dtype)  r = np.zeros((rows,cols),dtype=a.dtype)  m=cv2.merge([b,g,r])cv2.imshow("merge",m)cv2.waitKey()cv2.destroyAllWindows()

在这里插入图片描述

在这里插入图片描述

转载地址:https://codingpark.blog.csdn.net/article/details/106661901 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Anaconda-Navigator打开时闪退的解决办法【Mac】_CodingPark编程公园
下一篇:Pycharm使用-取消pytest的办法_CodingPark编程公园

发表评论

最新留言

不错!
[***.144.177.141]2024年04月04日 20时55分15秒