OpenCV程序练习(二):图像处理基础
一、彩色图像像素处理
代码
import cv2
import numpy as np
#----------蓝色通道----------
blue=np.zeros((300,300,3),dtype=np.uint8)
blue[:,:,0]=255
print("blue=\n",blue)
cv2.imshow("blue",blue)
#----------绿色通道----------
green=np.zeros((300,300,3),dtype=np.uint8)
green[:,:,1]=255
print("green=\n",green)
cv2.imshow("green",green)
#----------红色通道----------
red=np.zeros((300,300,3),dtype=np.uint8)
red[:,:,2]=255
print("red=\n",red)
cv2.imshow("red",red)
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果




程序分析
同理,数组green的第1个通道(图像green的G通道)值为255,数组red的第1个通道(图像red的R通道)值为255。
● 从通道值设置可以看出,在OpenCV中,通道的顺序是
B→G→R
二、生成像素值为随机数的图像
1、灰度图像
代码
import cv2
import numpy as np
img=np.random.randint(0,256,size=[256,256],dtype=np.uint8)
cv2.imshow("Grayscale",img)
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果

2、彩色图像
代码
import cv2
import numpy as np
img=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)
cv2.imshow("Colorscale",img)
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果

3、程序分析
随机灰度图像和随机彩色图像差别仅在size:随机灰度图像的size=[256,256],随机彩色图像的size=[256,256,3]
区别在于随机彩色图像必随机灰度图像多了两个通道数,随机灰度图像的size也可写为size=[256,256,1]
三、使用numpy.array访问彩色图像像素
代码
import cv2
import numpy as np
img=cv2.imread("demoimg.jpg")
cv2.imshow("before",img)
#使用item()函数读取原图像第0行第0列位置上的 B通道、G通道、R通道三个通道上的像素值
print("修改前:")
print("(0,0,0)=",img.item(0,0,0))
print("(0,0,1)=",img.item(0,0,1))
print("(0,0,2)=",img.item(0,0,2))
#使用嵌套循环语句将位于“第0行到第49行”和“第0列到第99列”的交叉区域内的像素值赋予随机值
for i in range(0,50):
for j in range(0,100):
for k in range(0,3):
img.itemset((i,j,k),np.random.randint(0,256,dtype=np.uint8)) #使用itemset()函数对像素进行修改
cv2.imshow("after",img)
#使用item()函数读取修改后图像第0行第0列位置上的 B通道、G通道、R通道三个通道上的像素值
print("修改后:")
print("(0,0,0)=",img.item(0,0,0))
print("(0,0,1)=",img.item(0,0,1))
print("(0,0,2)=",img.item(0,0,2))
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果


四、感兴趣区域(ROI)
1、获取ROI
代码
import cv2
img=cv2.imread("demoimg.jpg")
roi=img[170:220,110:160] #获取ROI
cv2.imshow("original image",img) #显示原始图像
cv2.imshow("ROI",roi) #显示ROI
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果

2、对ROI打码
代码
import cv2
import numpy as np
img=cv2.imread("demoimg.jpg",cv2.IMREAD_UNCHANGED) #读取图像,读取标记值cv2.IMREAD_UNCHANGED为保持原格式不变
cv2.imshow("original image",img) #显示原始图像
img[170:220,110:160]=np.random.randint(0,256,(50,50,3)) #将原图像的ROI用随机图像替换
cv2.imshow("result",img) #显示替换后图像
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果

五、通道操作
1、通道拆分
代码
import cv2
img=cv2.imread("colorimg.jpg") #读取图像
cv2.imshow("original image",img) #显示原图像
#分别拆分B、G、R三个通道
b,g,r=cv2.split(img)
"""
使用函数cv2.split()拆分图像通道,等价于:
b=img[:,:,0]
g=img[:,:,1]
r=img[:,:,2]
"""
#分别显示单独拆分出B、G、R三个通道的图像
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
#B通道设为0
img[:,:,0]=0
cv2.imshow("B0",img)
#G通道设为0,此时原图像的B和G通道值都为0,仅R通道有值
img[:,:,1]=0
cv2.imshow("B0G0",img)
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果

程序分析
- 从运行结果看出,单独拆分出的通道其对应的颜色会偏白,与其相对的颜色则偏黑
- 将指定通道值设为0后,该通道的颜色偏黑
2、通道合并
代码
import cv2
img=cv2.imread("colorimg.jpg") #读取图像
cv2.imshow("original image",img) #显示原图像
b,g,r=cv2.split(img) #分别拆分B、G、R三个通道
#分别按照B→G→R和R→G→B顺序合并通道
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])
#分别显示按照B→G→R和R→G→B顺序合并通道后的图像
cv2.imshow("BGR",bgr)
cv2.imshow("RGB",rgb)
#----------释放窗口---------
cv2.waitKey()
cv2.destroyAllWindows()
运行结果

程序分析
从运行结果可以看出,改变通道顺序后,图像显示效果会发生变化,从纯颜色角度看,其余对应的颜色相互颠倒,但R→G→B顺序的通道红色部分相对原图偏暗。
OpenCV程序练习(二):图像处理基础的更多相关文章
- Tensorflow深度学习之十二:基础图像处理之二
Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出原始图像: ...
- [Python图像处理] 一.图像处理基础知识及OpenCV入门函数
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- LINUX二十个基础命令
LINUX二十个基础命令 一. useradd命令 1.命令格式: useradd 选项 用户名 2.命令功能: 添加新的用户账号 3.常用参数: -c comment 指定一段注释性描述.-d 目录 ...
- MATLAB图像处理基础
MATLAB图像处理基础 2.2.1 图像文件格式及图像类型 1.MATLAB支持的几种图像文件格式: ⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像 ...
- [置顶] ubuntu12.04下编译opencv程序
ubuntu12.04下编译opencv程序 1.在ubuntu下安装好 opencv后(建议使用apt-get install 来安装) 2.使用程序FaceExaple.c来进行测试程序 #inc ...
- 黑马程序员:Java基础总结----类加载器
黑马程序员:Java基础总结 类加载器 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...
- 面试题(二)—Java基础(下)
一.进程和线程 进程 (1)正在运行的程序,是系统进行资源分配和调用的独立单位. (2)每一个进程都有它自己的内存空间和系统资源. 线程 (1)是进程中的一条执行路径. (2)一个进程如果只有一条执行 ...
- OpenCV探索之路(二十四)图像拼接和图像融合技术
图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要. 再举一个身边的例子吧,你用你的手 ...
- Mina 系列(二)之基础
Mina 系列(二)之基础 Mina 使用起来多么简洁方便呀,就是不具备 Java NIO 的基础,只要了解 Mina 常用的 API,就可以灵活使用并完成应用开发. 1. Mina 概述 首先,看 ...
- asp.net调用opencv类库,实现图像处理显示
asp.net调用opencv类库,实现图像处理显示 原理上来说,通过dll的调用,无论是asp.net还是winform都可以调用opencv及其类库.但是在实现的过程还是有许 ...
随机推荐
- 陪玩app小程序H5开发制作多少钱-软件开发,源码交付,永久售后.-陪玩线下陪玩软件搭建APP(系统、平台、源码)-游戏陪玩系统APP派单大厅H5社交圈子+多人聊天室小程序
线下陪玩APP平台,如何防止陪玩师接私单? 线下陪玩APP平台如果不解决陪玩师接私单的问题,那么你的陪玩平台一定赚不到钱! 为什么这么说呢?平台花费10万引流来1000个顾客,每个顾客的引流成本就是1 ...
- 详解GROUP BY 如何与 SELECT 语句进行交互?
SELECT 列表: 矢量聚合.如果 SELECT 列表中包含聚合函数,则 GROUP BY 将计算每组的汇总值.这些函数称为矢量聚合. Distinct 聚合.ROLLUP.CUBE 和 GROUP ...
- java如何将JSONObject转成实体对象
import com.google.gson.Gson; import org.json.JSONObject; // ... JSONObject json = new JSONObject(&qu ...
- 海康iSC综合安防平台-视频web插件调试
综合安防管理平台 视频WEB插件 1.demo_window_simple_playback.html.demo_window_simple_preview.html为简化版demo,可在此基础上开发 ...
- java学习之旅(day.21)
HTML 初识HTML HTML: Hyper Text Markup Language(超文本标记语言) 超文本包括文字.图片.音频.视频.动画等 W3C标准 W3C :World Wide Web ...
- 推荐一款模拟浏览器自动化操作神器!Mechanize
大家好,我是狂师! 今天给大家推荐一款用于模拟浏览器行为以进行网页自动化操作Python库:Mechanize. 1.介绍 Mechanize是Python中的一个库,它被设计用来自动化网页浏览和数据 ...
- 自定义Naive UI的数据表格Data Table中按钮Button图标
在Naive UI官网中详细介绍了[数据表格 Data Table](数据表格 Data Table - Naive UI)的使用方式 { title: "Action", key ...
- 基于 ESP8266_RTOS_SDK 驱动 HC-SR04
平台 芯片 ESP8266EX 模组 ESP-12F 开发板 NodeMCU SDK ESP8266_RTOS_SDK branch master commit 83517ba1f5e26b9413f ...
- PHP 中使用 ElasticSearch 的最佳实践 (下)
引言 上一篇文章,我们使用同步的方式将数据,同步写入到 ElasticSearch 中.接下来的这篇文章,主要介绍使用 RabbitMQ 的方式,异步的将数据同步到 ElasticSearch . 部 ...
- django验证码插件 --- django-simple-captcha
使用django-simple-captcha实现登录验证码: 第一步:安装pillow依赖 pip install pillow -i https://pypi.tuna.tsinghua.edu ...