python数字图像处理基础(二)——图像基本操作、滑动条、鼠标操作

这篇具有很好参考价值的文章主要介绍了python数字图像处理基础(二)——图像基本操作、滑动条、鼠标操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import cv2
import numpy as np
import matplotlib.pyplot as plt

图像读取与显示

  • 图像读取

cv2.MREAD_COLOR: 彩色图像 或用1

cv2.IMREAD_GRAYSCALE:灰度图像 或用0

img = cv2.imread(‘cat.jpg’, cv2.IMREAD_GRAYSCALE)

等同于: img = cv2.imread(‘cat.jpg’, 0)

img = cv2.imread("D:/OpenCV_code/bank_card/temp.jpg")
# 通过这样指定其他路径的文件图像
  • 图像的显示,也可以创建多个窗口

cv2.imshow(‘img’, img)

  • 等待时间,毫秒级,0表示任意键终止

cv2.waitKey(0)

cv2.destroyAllWindows()

  • 连接多张图片

横着连:res = np.hstack(img1,img2,img3)

竖着连:res = np.vstack(img1,img2,img3)

  • 截取部分图像数据

img = cv2.imread(‘cat.jpg’)

cat = img[0:200, 0:200] #切片


读取视频与查看属性

cv2.VideoCapture(source)可以捕获摄像头,用数字来控制不同的设备,例如0,1;如果是视频文件,直接制定好路径即可

source 取值 功能
0 获取笔记本电脑本机摄像头
文件及路径 获取视频文件
vc = cv2.VideoCapture('test.mp4')`

#检查是否打开正确`
if vc.isOpened():`
	open, frame = vc.read()`
else:`
	open = False`
while open:`
	ret, frame = vc.read()
	if frame is None:`
		break`
	if ret == True:`
		gray = cv2.cvColor(frame, cv2.COLOR_BGR2GRAY)`
		cv2.imshow('result', gray)`
		if cv2.waitKey(10) & OxFF == 27:   #等待一段时间或按ESC`
			break`
vc.release`
cv2.destroyAllWindows()`
import cv2
 
cap = cv2.VideoCapture('Forest.mp4')
while cap.isOpened():
    ret, frame = cap.read()
    # 调整窗口大小
    # 0可调大小,注意:窗口名必须imshow里面的一窗口名一直                   
    cv2.namedWindow("frame", 0)  
    # 设置长和宽                   
    cv2.resizeWindow("frame", 1600, 900)  
     #运行显示                  
    cv2.imshow('frame', frame)
    #q键退出运行窗口【英文状态下】
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
 
    cap.release()
cv2.destroyAllWindows()

此外可以通过cv2.VideoCapture.get()和.set()查看、更改视频属性。

OpenCV-Python设置曝光、对比度等参数_南沐ヾ的博客-CSDN博客_opencv python 对比度


图像保存

cv2.imwrite(‘mycat.png’, img)

区分:

img2 = img1 img2和img1指定同一幅图像
img2 = img1.copy() img2和img1指定两幅相同的图像


保存视频

cv2.VideoWriter()

VideoWriter(filename, fourcc, fps, frameSize[, isColor]) ->

  • 第一个参数是要保存的文件的路径
  • fourcc 指定编码器
  • fps 要保存的视频的帧率
  • frameSize 要保存的文件的画面尺寸
  • isColor 指示是黑白画面还是彩色的画面
import numpy as np
import cv2
 
cap = cv2.VideoCapture(0)
 
fourcc = cv2.VideoWriter_fourcc(*'XVID')
 
out = cv2.VideoWriter('testwrite.avi',fourcc, 20.0, (1920,1080),True)
 
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
 
        cv2.imshow('frame',frame)
        out.write(frame)
 
        if cv2.waitKey(10) & 0xFF == ord('q'):
            break
    else:
        break
 
cap.release()
out.release()
cv2.destroyAllWindows()

图像属性打印

  • img.shape --> (h,w,c) c,表示层数,3为彩图,在opencv中为BGR;灰度图只有(h,w)

  • type(img) --> numpy.ndarray

  • img.size --> 像素点个数

  • img.dtype --> dtype(‘uint8’) 数据类型

  • 图像颜色通道提取

b,g,r = cv2.split(img)
b   --> b通道像素点矩阵值
b.shape  --> (h,w)   #三个通道相同(一张图)
#只保留R通道,显示红色
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0   #提取R单通道,故按顺序BGR把0(代表B)、1(代表G)置为0

cv_show('R',cur_img)
  • cv2.split()和cv2.merge()函数

cv2.split():分离图像的BGR,cv2.merge():根据BGR值重新融合出图像


遍历图像的所有像素点的RGB值

import cv2
import numpy as np

np.set_printoptions(threshold=np.nan)    # 这里多加一行代码,避免控制台输出省略号的问题

pic_path = "../01.jpg"   # 图片路径
img = cv2.imread(pic_path)
for x in range(img.shape[0]):   # 图片的高
	for y in range(img.shape[1]):   # 图片的宽
		px = img[x,y]
		print(px)    # 这样就能得到每个点的bgr值


图像边界填充

先指定图像上下左右填充的值大小

top_size,bottom_size,left_size,right_size = (50,50,50,50)

函数

cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value)

  • src:原图像

  • top,bottem,left,right:分别表示四个方向上边界的长度

  • borderType:边界的类型 以abcdef为例

    cv2.BORDER_CONSTANT 固定值填充,value为颜色值
    cv2.BORDER_REFLECT 边界元素的镜像,填充的边界与原图像边界对称,成镜像,fedcba
    cv2.BORDER_DEFAULT 边界元素的镜像,填充的边界与原图像边界(忽略第一个元素)对称,成镜像,gfedcb
    cv2.BORDER_REPLICATE 用原图像边界的第一个元素进行填充,aaaaa
    cv2.BORDER_WRAP 取上下左右相反的镜像

  • value:如果borderType为cv2.BORDER_CONSTANT时需要填充的常数值

举例:

`import cv2`
`import numpy as np`
`import matplotlib.pyplot as plt`

`img = cv2.imread('sugar.jpg')`

`##画图`
`def draw_img(i,img,title):`
    `plt.subplot(2,3,i)`
    `plt.imshow(img)`
    `plt.axis('off')`
    `plt.title(title)`
    
`##BGR转RGB`
`img_rgb = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2RGB)`

`##边界填充`
`constant = cv2.copyMakeBorder(img_rgb, 100, 100, 100, 100, cv2.BORDER_CONSTANT, value=[255, 0, 0])`

`reflect = cv2.copyMakeBorder(img_rgb, 100, 100, 100, 100, cv2.BORDER_REFLECT)`

`default = cv2.copyMakeBorder(img_rgb, 100, 100, 100, 100, cv2.BORDER_DEFAULT)`

`replicate = cv2.copyMakeBorder(img_rgb, 100, 100, 100, 100, cv2.BORDER_REPLICATE)`

`wrap = cv2.copyMakeBorder(img_rgb, 100, 100, 100, 100, cv2.BORDER_WRAP)`

`##画图`
`draw_img(1,img_rgb,'original')`
`draw_img(2,constant,'constant')`
`draw_img(3,reflect,'reflect')`
`draw_img(4,default,'default')`
`draw_img(5,replicate,'replicate')`
`draw_img(6,wrap,'wrap')`
`plt.show()`

python数字图像处理基础(二)——图像基本操作、滑动条、鼠标操作,数字图像处理,python,计算机外设,opencv,计算机视觉,图像处理


数值计算

img1 = img1 + 10 :
img的G、B、R三个图层的每个像素点的亮度都增加10

也可以是两个图相加
img1+img2
对应相同位置像素点数值相加,范围仍是0-255,超过255取余数

add(img1,img2)
两图对应的相同位置像素点数值相加,结果大于等于255就取255,小于255就取数值相加的值本身


图像大小变化

img1 = cv2.resize(img1, (500, 200))
其中(500,200)代表img1要改变成的shape值的长和宽

img1 = cv2.resize(img1, (0, 0), fx=1, fy=3)
前面不设具体值,用fx、fy表示与原图像x、y的倍数关系,伸缩图像大小


图像窗口滑动条的创建和使用

createTrackbar() 这个函数用于创建一个可以调整数值的滑动条,并将滑动条附加到指定的窗口上。
滑动条(Trackbar)是一种可以动态调节参数的工具,它依附于窗口而存在。
函数参数:

def createTrackbar(trackbarName, windowName, value, count, onChange)
具体含义为:

  1. trackbarname:跟踪栏名称,创建的轨迹栏的名称。
  2. Winname:窗口的名字
  3. value 该变量的值反映滑块的初始位置。
  4. count 表示滑块可以达到的最大位置的值
  5. onChange:回调函数,每次滑动都会调用回调函数。

cv2.getTrackbarPos(trackbarname, winname) → retval
参数:
第一个:滑动条名
第二个:窗口名
返回值:指定窗口上指定滑动条的当前位置

使用方法

方法一:即先定义createTrackbar() 滑动条,再调用getTrackbarPos获取createTrackbar的返回值用变量储存,进行这样的交互操作。
方法二:也可直接调用createTrackbar() 函数,直接就运行函数,进而反复调用createTrackbar()的第五个参数——自定义函数中进行操作也可。在自定义函数中调用getTrackbarPos获取createTrackbar的返回值用变量储存,再进行交互操作。
即一个不用reateTrackbar()的第五个参数,一个用。


鼠标操作

小白学pyhon(opencv鼠标操作)_mcl19909949541的博客-CSDN博客

【Python+OpenCV入门学习】六、鼠标操作_楚俊慕的博客-CSDN博客

鼠标交互操作主要通过两个函数实现:
第一个是cv2.setMouseCallback(windowName, onMouse [, param])
第二个是**setMouseCallback()**的第二个参数,称为鼠标回调函数onMouse(event, x, y, flags, param)

cv2.setMouseCallback(windowName, onMouse [, param])
第一个是你打开的窗口名字(要对应)
第二个是你定义的鼠标事件函数(任意)
鼠标回调函数:onMouse(event, x, y, flags, param)
这个参数列表不要改变它,除了param外其他都是由回调函数自动获取值。文章来源地址https://www.toymoban.com/news/detail-801304.html

  1. event:由回调函数根据鼠标对图像的操作自动获得,内容包含左键点击,左键弹起,右键点击…等等等非常多的操作。
  2. x,y:由回调函数自动获得,记录了鼠标当前位置的坐标,坐标以图像左上角为原点(0, 0),x方向向右为正,y方向向下为正
  3. flags:记录了一些专门的操作
  4. param:从setMouseCallback()里传递过来的参数。该参数在setMouseCallback()处是可选参数,所以可以不设置。
    param即为我们向里面传的图片参数
# event:
EVENT_LBUTTONDBLCLK = 7         左键双击
EVENT_LBUTTONDOWN = 1           左键点击
EVENT_LBUTTONUP = 4             左键释放
EVENT_MBUTTONDBLCLK = 9         中间释放
EVENT_MBUTTONDOWN = 3           中间点击
EVENT_MBUTTONUP = 6             中间释放
EVENT_MOUSEHWHEEL = 11          滚轮事件
EVENT_MOUSEMOVE = 0             滑动
EVENT_MOUSEWHEEL = 10           滚轮事件
EVENT_RBUTTONDBLCLK = 8         右键双击
EVENT_RBUTTONDOWN = 2           右键点击
EVENT_RBUTTONUP = 5             右键释放

# flags:
EVENT_FLAG_ALTKEY = 32          按Alt不放事件
EVENT_FLAG_CTRLKEY = 8          按Ctrl不放事件
EVENT_FLAG_LBUTTON = 1          左键拖拽
EVENT_FLAG_MBUTTON = 4          中键拖拽
EVENT_FLAG_RBUTTON = 2          右键拖拽
EVENT_FLAG_SHIFTKEY = 16        按Shift不放事件

到了这里,关于python数字图像处理基础(二)——图像基本操作、滑动条、鼠标操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV基本图像处理操作(一)——图像基本操作与形态学操作

    图像显示 转hsv图像 颜色表示为三个组成部分:色调(Hue)、饱和度(Saturation)和亮度(Value)。常用于图像处理中,因为它允许调整颜色的感知特性,如色彩和亮度,这些在RGB颜色模型中不那么直观。 HSV模型特别适用于任务如图像分割和对象追踪,因为它可以更好地处理光

    2024年04月22日
    浏览(89)
  • (数字图像处理MATLAB+Python)第三章图像基本运算-第二节:图像代数运算

    A:概述 加法运算 :指将两幅同大小的图像进行像素级别的加法操作,得到一幅新的图像。设两幅图像对应的像素值分别为 f 1 ( x , y ) f_{1}(x,y) f 1 ​ ( x , y ) 和 f 2 ( x , y ) f_{2}(x,y) f 2 ​ ( x , y ) ,则它们的加法运算可表示为 g ( x , y ) = f 1 ( x , y ) + f 2 ( x , y ) g(x,y)=f_{1}(x,y) + f_{

    2023年04月12日
    浏览(67)
  • ENVI中图像处理-基本操作

    熟悉基本的图像处理操作,包括:图像显示、彩色合成、多波段影像叠加、查看头文件、编辑头文件信息、图像裁剪、两个时期影像的对比、关闭文件。 掌握图像处理的基本操作 内容一:打开影像,进行彩色合成:真彩色、标准假彩色、任意假彩色; 1、影像打开 数据:D

    2024年02月08日
    浏览(40)
  • python数字图像处理基础(四)——图像平滑处理、形态学操作、图像梯度

    让有噪音点(图像上显得突兀的像素点)的图像变得更加自然顺眼 1.均值滤波 blur() 根据核的大小(rowcol),每个像素值就等于以此像素为中心的周围rowcol个像素的平均值。 核大一点,显然越平滑、模糊。 result = cv2.blur(img, (15, 15)) 2.方框滤波 boxFilter() normalize=true的时候,效果同

    2024年01月18日
    浏览(81)
  • OpenCV基本图像处理操作(十)——图像特征harris角点

    角点 角点是图像中的一个特征点,指的是两条边缘交叉的点,这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中,角点是重要的特征,因为它们通常是图像中信息丰富的区域,可以用于图像分析、对象识别、3D建模等多种应用。 角点的识别可以帮助在进

    2024年04月23日
    浏览(63)
  • 【Python_Opencv图像处理框架】图像基本操作+90bb5729-b33a-4e82-a0d9-faa3e5cbf621

    很幸运能选择Python语言进行学习,这是有关Opencv的图像处理的第一篇文章,讲解了有关图像处理的一些基础操作,作为初学者,我尽己所能,但仍会存在疏漏的地方,希望各位看官不吝指正❤️ 1. 计算机眼中的图像 计算机眼中的图像由一个个像素组成, 每个像素点的值在

    2023年04月18日
    浏览(41)
  • 第一章 基本的图像操作和处理

    这是个PIL的简单例子:读入图片、转灰度图、显示图片(这两张图片显然有点太大了)。 1.1.1转图像格式 将jpg转成png 1.1.2创建缩略图 显然前面的 图片太大 了,我们可以创建缩略图显得小一点 需要注意的是,这个函数只能缩小、不能放大,缩小后就回不去了。 1.1.3复制和粘

    2024年02月14日
    浏览(39)
  • (数字图像处理MATLAB+Python)第十二章图像编码-第一、二节:图像编码基本理论和无损编码

    图像编码 :一种将数字图像转换为压缩表示形式的过程。它的目标是减少图像数据的存储空间,并在传输或存储时减少带宽和存储需求、主要分为两类 无损压缩 :尽可能地保留原始图像的所有信息,以实现无失真的压缩。其中最常见的算法之一是无损JPEG(JPEG-LS)编码,它

    2024年02月10日
    浏览(145)
  • python数字图像处理基础(九)——特征匹配

    蛮力匹配(ORB匹配) Brute-Force匹配非常简单,首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行(描述符)距离测试,最后返回距离最近的关键点. 对于BF匹配器,首先我们必须使用**cv2.BFMatcher()**创建 BFMatcher 对象。它需要两个可选的参数: normTyp

    2024年01月19日
    浏览(53)
  • python数字图像处理基础(十)——背景建模

    背景建模是计算机视觉和图像处理中的一项关键技术,用于提取视频中的前景对象。在视频监控、运动检测和行为分析等领域中,背景建模被广泛应用。其基本思想是通过对视频序列中的像素进行建模,找到视频中的静态背景,并将不同的像素标记为背景和前景,从而使后续

    2024年01月19日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包