OpenCV图像处理基础_CodingPark编程公园
发布日期:2021-06-29 15:46:42
浏览次数:3
分类:技术文章
本文共 5265 字,大约阅读时间需要 17 分钟。
文章介绍
本文讲述如何使用Python + OpenCV完成对图像的基本处理
OpenCV图像处理基础
- OpenCV 安装
- 图像处理基础入门
- 像素处理
- 使用numpy访问像素
- 获取图像属性
- ROI感兴趣区域
- 通道拆分与合并
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月04日 20时55分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
面试笔试易错知识点Java篇八
2019-04-29
弹性事务框架ETF4J——面向Java微服务的交易最终一致性解决方案
2019-04-29
【Scala 教程】Scala 条件与循环语句
2019-04-29
【Scala 教程】Scala 集合类型
2019-04-29
【Scala 教程】Scala 类、对象和特征
2019-04-29
【Scala 教程】Scala 模式匹配与异常处理
2019-04-29
JAVA 线程休眠 sleep 与 线程礼让 yield
2019-04-29
JAVA Lock锁
2019-04-29
JAVA 线程同步机制 synchronized
2019-04-29
MySQL 安装教程(无脑版)
2019-04-29
JAVA 简单实现UDP demo
2019-04-29
MySQL 事务--转账
2019-04-29
JAVA UDP简单实现实时发送消息
2019-04-29
IDEA 怎么删除一个Module
2019-04-29
JAVA 和MySQL使用JDBC连接
2019-04-29
JAVA 反射的性能测试
2019-04-29
HTML 初探
2019-04-29
成功关键在于此:如何创造一个有即时价值的最小化可行产品?
2019-04-29
终端大改造:只需五步,构建你的梦中情“端”
2019-04-29