PyOpenCV 基本操作

 

目录

1. 图片加载、显示和保存

2. 图像显示窗口创建与销毁

3. 图片宽、高、通道数获取

4. 图像像素数目和图像数据类型的获取

5. 生成指定大小的空图像,  生成指定大小的空图像

6. 访问和操作图像像素

 

7.  图像三通道分离和合并

8. 抓取摄像头


 

1. 图片加载、显示和保存

import cv2
# 生成图片
img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
# 生成灰色图片
imgGrey = cv2.imread("1.jpg", 0)
#  展示原图
cv2.imshow("img", img)
#  展示灰色图片
#cv2.imshow("imgGrey", imgGrey)
#  等待图片的关闭
cv2.waitKey(0)
# 保存灰色图片
#cv2.imwrite("Copy.jpg", imgGrey)

 

2. 图像显示窗口创建与销毁

    cv2.namedWindow(窗口名,属性) 创建一个窗口,属性—指定窗口大小模式:

    cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小

    cv2.WINDOW_NORMAL:窗口大小可调整

    cv2.destoryAllWindows(窗口名) 删除任何建立的窗口

 

import cv2# 生成图片img = cv2.imread(r'C:\Users\Desktop\test1.jpg')cv2.namedWindow("img", cv2.WINDOW_NORMAL)cv2.imshow("img", img)cv2.waitKey()cv2.destroyAllWindows()

 

3. 图片宽、高、通道数获取

img.shape 返回图像高(图像矩阵的行数)、宽(图像矩阵的列数)和通道数3个属性组成的元组,若图像是非彩色图,则只返回高和宽组成的元组。

import cv2img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
imgGray = cv2.imread(r'C:\Users\Desktop\test1.jpg', 0)print('****img*****)
print( img.shape)
print('width: ', img.shape[0])
print('heigh: ', img.shape[1])
print('channel: ', img.shape[2])print('\n\n***imgGray**')
print(imgGray.shape)
print('width: ', imgGray.shape[0])
print('heigh: ', imgGray.shape[1])
print('channel: ', imgGray.shape[2])

 

4. 图像像素数目和图像数据类型的获取

图像矩阵img的size属性和dtype分别对应图像的像素总数目和图像数据类型。一般情况下,图像的数据类型是uint8。

import cv2img = cv2.imread(r'C:\Users\Desktop\test1.jpg')print('图像类型: ', type(img))
print('图像像素点数: ', img.size)
print('图像像素灰度值类型:', img.dtype)

 

5. 生成指定大小的空图像,  生成指定大小的空图像

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')
imgZero = np.zeros(img.shape, np.uint8)
imgFix = np.zeros((300, 500, 3), np.uint8)cv2.imshow("imgZero", imgZero)
cv2.imshow("imgFix", imgFix)
cv2.waitKey()
 

6. 访问和操作图像像素

 OpenCV中图像矩阵的顺序是BGR。可以直接通过坐标位置访问和操作图像像素。

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')pixel_50_100 = img[50, 100]
#返回3个值,分别是该像素点在BGR通道的值
print(pixel_50_100)img[50, 100] = (0, 0, 255)cv2.imshow("img", img)
cv2.waitKey()

分开访问图像某一通道像素值也very方便

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')img[0:100, 100:200, 0] = 255
img[100:200, 200:300, 1] = 255
img[200:300, 300:400, 2] = 255cv2.imshow("img", img)
cv2.waitKey()

更改图像某一矩形区域的像素值也很方便:

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')
img[0:50, 1:100] = (0, 0, 255)cv2.imshow("img", img)
cv2.waitKey()

 

7.  图像三通道分离和合并

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')b, g, r = cv2.split(img)# b = cv2.split(img)[0]
# g = cv2.split(img)[1]
# r = cv2.split(img)[2]merged = cv2.merge([b, g, r])cv2.imshow("Blue", b)
cv2.imshow("Green", g)
cv2.imshow("Red", r)cv2.imshow("Merged", merged)
cv2.waitKey()

 

8. 抓取摄像头

import cv2
import numpy as npcap  = cv2.VideoCapture(0)for i in range(0, 19):print(cap.get(i)) while(1):ret, frame = cap.read()hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)lower_blue = np.array([100, 47, 47])upper_blue = np.array([124, 255,255])mask = cv2.inRange(hsv, lower_blue, upper_blue) #蓝色掩模res = cv2.bitwise_and(frame, frame, mask = mask)cv2.imshow(u"Capture", frame)cv2.imshow(u"mask", mask)cv2.imshow(u"res", res)key = cv2.waitKey(1)if key & 0xff == ord('q') or key == 27:print(frame.shape,ret)breakcap.release()
cv2.destroyAllWindows()

 

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

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

相关文章

python中用于标识字符串的定界符_Python 基本数据类型

######################基本数据类型######################数字类型整数 int整数是用来表示整数数值,即没有小数部分的数值,包括正整数 负整数和0整数类型包括十进制整数 八进制整数 十六进制整数和二进制整数例如: 0 , 100 , 65205浮点数 float浮点数由整数部分和小数部分组成…

适用于Java开发人员的Elasticsearch:命令行中的Elasticsearch

本文是我们学院课程的一部分,该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

系统间账号认证系统同步方案

系统间账号认证系统同步方案 基础原理:(基于Web) 浏览器在个请求传递cookie到服务器,服务器对cookie增删改查的操作, 写入JSessionId实现与服务器Session的绑定,保持会话 单机情况下:一个域名,对应一个cookie&#xff…

Pytorch 加载预训练模型参数时出现size mismatch错误

目录 1 不妨先研究一下’ resnet18-5c106cde.pth’里面存了什么东西以及它的数据类型 (1_1)’ resnet18-5c106cde.pth’的数据类型

python元类单例_python面向对象和元类的理解

1 python类对象与实例对象python中一切皆对象(广义上的对象),类也不例外,我们可以称类为类对象。python中内建函数type()可以返回对象的类型,例如type(int)会得到返回值,而int为类型工厂函数,是内置的类对象。如果对自…

Java命令行界面(第7部分):JCommander

这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库。 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高和最受欢迎的库之一: JCommander 。 JCommander的网页上指出&…

Pytorch 加载部分预训练模型并冻结某些层

目录 1 pytorch的版本&#xff1a; 2 数据下载地址&#xff1a; 3 原始版本代码下载&#xff1a; 4 直接上代码&#xff1a; 1 pytorch的版本&#xff1a; 2 数据下载地址&#xff1a; <https://download.pytorch.org/tutorial/hymenoptera_data.zip> 3 原始…

INT类型知多少

前言&#xff1a; 整型是MySQL中最常用的字段类型之一&#xff0c;通常用于存储整数&#xff0c;其中int是整型中最常用的&#xff0c;对于int类型你是否真正了解呢&#xff1f;本文会带你熟悉int类型相关知识&#xff0c;也会介绍其他整型字段的使用。 1.整型分类及存储范围 整…

altera fpga 型号说明_A/X家FPGA架构及资源评估

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群评估对比xilinx以及altera两家FPGA芯片逻辑资源。首先要说明&#xff0c;现今FPGA除了常规逻辑资源&#xff0c;还具有很多其他片内资源比如块RAM、DSP单元、高速串行收发器、PLL、AD…

guava api_使用Google Guava的订购API

guava api我们在Google的Guava库中玩的更多&#xff0c;这真是一个了不起的库&#xff01; 我们用于它的最新内容是为我们的域对象整理比较器。 这是如何做。 使用Apache Isis的JDO Objectstore &#xff0c;使您的类实现java.lang.Comparable &#xff0c;并对集合使用SortedS…

Pytorch 加载和保存模型

目录 保存和加载模型 1. 什么是状态字典&#xff1a;state_dict? 2.保存和加载推理模型 2.1 保存/加载 state_dict &#xff08;推荐使用&#xff09; 2.2 保存/加载完整模型 3. 保存和加载 Checkpoint 用于推理/继续训练 4. 在一个文件中保存多个模型 5. 使用在不同…

02-CSS基础与进阶-day9_2018-09-12-20-29-40

定位 静态定位 position: static 相对定位 position: relative 绝对定位 position: absolute 脱标 参考点 子绝父相 让绝对定位的盒子水平居中和垂直居中 固定定位 position: fixed 参考点 浏览器左上角 固定定位的元素脱标不占有位置 兼容性 ie6低版本不支持固定定位 02绝对…

activity直接销毁_Android -- Activity的销毁和重建

两种销毁第一种是正常的销毁&#xff0c;比如用户按下Back按钮或者是activity自己调用了finish()方法&#xff1b;另一种是由于activity处于stopped状态&#xff0c;并且它长期未被使用&#xff0c;或者前台的activity需要更多的资源&#xff0c;这些情况下系统就会关闭后台的进…

Storm和Kafka集成的重要生产错误和修复

我将在此处描述Storm和Kafka集成模块的一些细节&#xff0c;一些您应该意识到的重要错误以及如何克服其中的一些错误&#xff08;尤其是对于生产安装&#xff09;。 我在生产安装中大量使用Apache Storm&#xff0c;并将Kafka作为主要输入源&#xff08;Spout&#xff09;。 …

博客园背景设置CSS代码

/配色参考->>->>>//https://zh.spycolor.com/color-index,a*/ #home { margin: 0 auto; width: 90%;/原始65/ min-width: 980px;/页面顶部的宽度/ background-color:rgba(233,214,107,0.3);/博客主页主体框的颜色/ padding: 30px; margin-top: 25px; margin-bot…

matplotlib 画多条折线图且x轴下标非数值

直接上python代码&#xff1a; # -*- coding: utf-8 -*- import matplotlib.pyplot as plt names [GFK, SA, DA-NBNN, DLID, DaNN, Ours] x range(len(names))y_1 [0.464, 0.45, 0.528, 0.519, 0.536, 0.841] y_2 [0.613, 0.648, 0.766, 0.782, 0.712, 0.954] y_3 [0.663…

julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算

数学运算https://www.zhihu.com/video/1113554595376295936数学运算比Matlab更直观的数学表达方式x 102x>>20但这就导致了可能会出现语法的冲突十六进制整数文本表达式 0xff 可以被解析为数值文本 0 乘以变量 xff浮点数文本表达式 1e10 可以被解析为数值文本 1 乘以变量…

Mysql 模糊查询 转义字符

MySQL的转义字符“\”\0 一个ASCII 0 (NUL)字符。 \n 一个新行符。 \t 一个定位符。 \r 一个回车符。 \b 一个退格符。 \ 一个单引号(“”)符。 \ " 一个双引号(“ "”)符。 \\ 一个反斜线(“\”)符。 \% 一个…

Pytorch LSTM初识(详解LSTM+torch.nn.LSTM()实现)1

pytorch LSTM1初识 目录 pytorch LSTM1初识 ​​​​​​​​​​​​​​​​​​​​​ 一、LSTM简介1

Java命令行界面(第8部分):Argparse4j

Argparse4j是“ Java命令行参数解析器库”&#xff0c;其主页描述为“基于Python的argparse模块的Java命令行参数解析器库”。 在本文中&#xff0c;我将简要介绍如何使用Argparse4j 0.7.0处理命令行参数&#xff0c;该参数与本系列中的前七篇有关Java命令行处理的文章中所解析…