三、Numpy数组操作

一、对图片各个像素点的像素值进行操作

image.shape[0]:image图像的height
image.shape[1]:image图像的width
image.shape[2]:image图像的channels

import cv2
import numpy as npdef access_pixels(image):print(image.shape)height = image.shape[0]width = image.shape[1]channels = image.shape[2]print("width:%s,height:%s,channels:%s"%(width,height,channels))for row in range(height):for col in range(width):for c in range(channels):pv = image[row,col,c]#获取原图的所有颜色通道的像素点的像素值image[row,col,c] = 255 - pvcv2.imshow("pixels ",image)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)t1 = cv2.getTickCount()
access_pixels(src)#为了得到该代码的运行时间,通常再这行代码上下放入一个Tick进行计时
t2 = cv2.getTickCount()time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

运行结果为:在这里插入图片描述
在这里插入图片描述
运行的时间为619ms时间有点长,这里也就是实现图像像素值的反转操作而已,这里可以调用bitwise_notAPI(这个函数是C++写的),来缩短运行时间
cv2.bitwise_not(image):255 - image所对应的像素值

import cv2
import numpy as npdef inverse(image):dst = cv2.bitwise_not(image)cv2.imshow("inverse_image",dst)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
inverse(src)
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

运行效果如下:在这里插入图片描述

在这里插入图片描述

二、创建图像

创建一个400×400的三颜色通道的图像,图像的B通道赋值为1,其他颜色通道赋值为0,即显示蓝色
np.zeros([400,400,3],np.uint8):创建一个400*400的3颜色通道的图像,全部赋值为0,且每个像素值单位为uint8

import cv2
import numpy as npdef create_image():img = np.zeros([400,400,3],np.uint8)img[:,:,0] = np.ones([400,400])*255cv2.imshow("new image",img)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

效果图如下:在这里插入图片描述
在这里插入图片描述

三、对单通道图像进行操作

方法一:先对400×400大小的单通道图像全部初始化为0,然后再对400×400区域的像素1乘以127,最终转换为127像素的灰色图像。

np.zeros([400,400,3],np.uint8):创建一个400400的3颜色通道的图像,全部赋值为0,且每个像素值单位为uint8
np.ones([400,400])*127:对400
400的图像的元素再次基础上分别乘以127

import cv2
import numpy as npdef create_image():img = np.zeros([400,400,1],np.uint8)img[:,:,0] = np.ones([400,400])*127cv2.imshow("new image",img)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

运行效果如下:在这里插入图片描述

在这里插入图片描述

方法二:直接对400×400像素大小的单通道图像全部初始化为1,再对图像乘以255,得到白色图像。

img = np.ones([400,400,1],np.uint8):创建一个400*400的单通道的图像,全部赋值为1,且每个像素值单位为uint8
img = img * 255:img图像所有的像素值均对应乘以255

import cv2
import numpy as npdef create_image():img = np.ones([400,400,1],np.uint8)img = img * 255cv2.imshow("new image",img)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

效果图如下:在这里插入图片描述

在这里插入图片描述

四、对矩阵操作

np.ones([3,3],np.uint8):创建一个3 * 3的矩阵,全部赋值为1,且每个像素值单位为uint8
m1.fill(52):m1图像的所有像素点的像素值全部填充为52
m1.reshape([1,9]):将m1原本3 * 3的矩阵转换为1* 9的矩阵

import cv2
import numpy as npdef create_image():m1 = np.ones([3,3],np.uint8)m1.fill(52)print(m1)m2 = m1.reshape([1,9])print(m2)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

效果图如下:在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

picacg服务器维护,picacg的服务器地址是什么

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情用户数据注…

Redis-Sampler:深入了解你的Redis存储

redis-sampler 是Redis作者antirez 同学开发的一个ruby 小工具,用于对Redis存储概况进行抽样检测并给出分析结果。 项目地址:https://github.com/antirez/redis-sampler 使用方式: 下载源码,执行下面命令: ./redis-sam…

二叉树笔记(深度遍历与广度遍历+13道leetcode题目(深度3道、广度10道))

本文章为结合leetcode题目以及公众号“代码随想录”的文章所做的笔记! 感觉代码随想录的题目整理真的很好,比自己盲目刷题好很多。 目录1、二叉树小记1、满二叉树与完全二叉树2、二叉搜索树3、平衡二叉搜索树AVL4、二叉树存储方式5、二叉树遍历方式6、二…

ZZ的计算器

Problem Description ZZ自从上大学以来,脑容量就是以SB计算的,这个吃货竟然连算术运算也不会了,可是当今的计算机可是非常强大的,作为ACMer, 几个简单的算术又算得了什么呢?可是该怎么做呢?ZZ只…

kotlin 覆盖属性_Kotlin程序| 方法覆盖的示例

kotlin 覆盖属性方法重载 (Method Overriding) Method overriding allows derived class has the same function name and signature as the base class 方法重写允许派生类具有与基类相同的函数名称和签名 By method overriding we can provide different implementation into…

对视频中的特征颜色物体(青色水杯)进行跟踪

方法一:目标物体白色,其余黑色 import cv2 import numpy as npdef extrace_object():capture cv2.VideoCapture("G:/Juptyer_workspace/study/data/yy.mp4")while(True):ret,frame capture.read()if retFalse:breakhsv cv2.cvtColor(frame…

Android实现号码归属地查询

我们通过发送XML访问 WebService就可以实现号码的归属地查询,我们可以使用代理服务器提供的XML的格式进行设置,然后请求提交给服务器,服务器根据请求就会返回给一个XML,XML中就封装了我们想要获取的数据。 发送XML 1.通过URL封装路…

如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter...

一、如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,WPF中的DataGrid 不同于Windows Forms中的 DataGridView。 在DataGrid的Items集合中,DataGridRow…

【C++ grammar】常量、指针、Usage of using, typedef, and #define

目录1、常量 (Constant)2、指针(Pointer)3、Usage of using, typedef, and #define1、常量 (Constant) 常量是程序中一块数据,这个数据一旦声明后就不能被修改了。 如果这块数据有一个名字&am…

斯威夫特山地车_斯威夫特| 两个数字相加的程序

斯威夫特山地车In this program, we will have an idea - how two numbers can be added and displayed as the output on the screen? 在此程序中,我们将有一个想法- 如何将两个数字相加并显示为屏幕上的输出 ? Open XCode terminal and type the fol…

四、色彩空间

一、色彩空间 1、什么是色彩空间? 色彩空间是定义的颜色范围。 2、常见的色彩空间有哪些? ①RGB ②HSV 在OpenCV中,Hue的值为0~180,之所以不是360是因为,8位存不下,故进行归一化操作,使得H…

Oracle LOB 详解

一. 官方说明Oracle 11gR2 文档:LOB Storagehttp://download.oracle.com/docs/cd/E11882_01/appdev.112/e18294/adlob_tables.htm#ADLOB45267Oracle 10gR2 文档:LOBs in Tableshttp://download.oracle.com/docs/cd/B19306_01/appdev.102/b14249/adlob_t…

FIFA的完整形式是什么?

国际足联:国际足球联合会 (FIFA: Federation Internationale de Football Association) FIFA is an abbreviation of the "Federation Internationale de Football Association" in French. It is also known as the International Federation of Associa…

POJ 1654 Area

题意:从原点出发,沿着8个方向走,每次走1个点格或者根号2个点格的距离,最终回到原点,求围住的多边形面积。分析:直接记录所经过的点,然后计算多边形面积。注意,不用先保存所有的点&am…

【C++ grammar】重载、内联、变量作用域、带默认参数的函数

目录1、变量的作用域1. 变量的作用域分类2. Unary Scope Resolution (一元作用域解析运算符)2、重载函数3、带有默认参数值的函数4、重载函数 VS 带有默认参数值的函数5、内联函数(Inline Function)1. 普通函数的优缺点2. 使用内联函数3. 定义内联函数4.…

五、像素运算

一、相关概念 1、算术运算 Ⅰ加减乘除 Ⅱ调节亮度 Ⅲ调整对比度 2、逻辑运算 Ⅰ与或非 Ⅱ遮罩层控制 二、图像算术运算(加减乘除均值方差) 其中图像的加减乘除需要保证两张图像的大小相同 import cv2 import numpy as npdef add(src1,src2):dst cv2.add(src1,src2)cv2.im…

创建bootstrap项目_使用Bootstrap创建第一个网页

创建bootstrap项目使用Bootstrap创建第一个网页 (Create First Webpage with Bootstrap) In the previous article, we learned "how to setup bootstrap?" for a web project. If you haven’t gone through that, it is recommended to read it. Now, in this art…

Chaikin Curve(球面插值)

在两条折线间完成平滑的过渡是 用画布做UI 或者做类似地图编辑器一类的工作的 很常见的任务。 怎么样化方为圆是决定工作效率的很重要的因素。(当需要编辑的曲线多起来, 复杂起来的时候,这会是件相当繁重的工作) 最容易想到的莫非…

【2020 电设G题 图像题解】

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 2022.3.10新增订阅通知 近期把此专栏设置为了付费模式,可以直接花9.9买这个专栏,买了就可以直接这个专栏的所有文章了。后…

六、ROI和泛洪填充

一、ROI ROI:region of interest,即感兴趣区域。 一般主要通过numpy来获取ROI 将某区域转变为灰色图片再覆盖原图像 import cv2 import numpy as npsrc cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg") cv2.imshow(&quo…