opencv---图像加载与保存

目录:
一:获取图像的信息
   什么是图像:
二:读取视频,打开摄像头
三:图像保存(修改属性)

一:获取图像的信息
什么是图像:
结构化存储的数据信息
图像属性:
-通道数目
-高与宽
-像素数据
-位图深度

import cv2 as cv

def get_image_info(image):
    print(type(image))  #<class 'numpy.ndarray'>    numpy类型数组
    print(image.shape)  #打印图像的高度,宽度,通道数(608, 343, 3)3个方向
    print(image.size)   #打印图像的大小625632==>608*343*3
    print(image.dtype)  #dtype:每个像素点有3个通道,每个通道所占的位数:无符号的int8位uint8

src = cv.imread("./1.png")  #读取图片
get_image_info(src)
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系
cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()

二:读取视频,打开摄像头

import cv2 as cv
import numpy as np

def video_demo():
    capture = cv.VideoCapture(0)    #这句话打开摄像头捕获图像   opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头
    while True:
        ret,frame = capture.read()  #ret    frame:视频中的每一帧
        frame = cv.flip(frame,1)    #将视频帧左右调换,回正,镜像调换
        cv.imshow("video",frame)    #将视频中每一帧显示出来
        c = cv.waitKey(50)          #50毫秒关闭当前捕获的图像,显示下一个
        # print(c)    #c是用户响应的按键
        if c == 27:                 #27是ESC键的ASCII码值
            break

def get_image_info(image):
    print(type(image))  #<class 'numpy.ndarray'>    numpy类型数组
    print(image.shape)  #打印图像的高度,宽度,通道数(608, 343, 3)3个方向
    print(image.size)   #打印图像的大小625632==>608*343*3
    print(image.dtype)  #dtype:每个像素点有3个通道,每个通道所占的位数:无符号的int8位uint8
    pixel_data = np.array(image) #获取了所有的像素数据
    print(pixel_data)

src = cv.imread("./1.png")  #读取图片
get_image_info(src)
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系
video_demo()    #下面的waitKey就是等待图像和视频两个操作
cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

补充:VideoCapture
VideoCapture打开视频流,视频文件,VideoCapture(0)—>0代表摄像头,若有多个摄像头,按照顺序0,1,2…
也可以打开视频文件,写入视频路径,然后循环read读取数据帧即可
读取视频内容,对每一帧图像进行处理,是要对内容进行分析,对象检测,对象追踪,等等。OpenCV读出来的视频都是没有声音的,而且视频不易过大音视频的编码解码是MPEG

三:图像保存(修改属性)

import cv2 as cv
import numpy as np

def video_demo():
    capture = cv.VideoCapture(0)    #这句话打开摄像头捕获图像   opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头
    while True:
        ret,frame = capture.read()  #ret    frame:视频中的每一帧
        frame = cv.flip(frame,1)    #将视频帧左右调换,回正,镜像调换
        cv.imshow("video",frame)    #将视频中每一帧显示出来
        c = cv.waitKey(50)          #50毫秒关闭当前捕获的图像,显示下一个
        # print(c)    #c是用户响应的按键
        if c == 27:                 #27是ESC键的ASCII码值
            break

def get_image_info(image):
    print(type(image))  #<class 'numpy.ndarray'>    numpy类型数组
    print(image.shape)  #打印图像的高度,宽度,通道数(608, 343, 3)3个方向
    print(image.size)   #打印图像的大小625632==>608*343*3
    print(image.dtype)  #dtype:每个像素点有3个通道,每个通道所占的位数:无符号的int8位uint8
    pixel_data = np.array(image) #获取了所有的像素数据
    print(pixel_data)

src = cv.imread("./1.png")  #读取图片
get_image_info(src)
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系

video_demo() #下面的waitKey就是等待图像和视频两个操作

gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)  #获取一张灰度图像
cv.imwrite("./save.png",gray)    #图像保存,数据写入
cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
好的,关于人脸识别的问题,以下是使用OpenCV-Java实现人脸识别的代码示例: 1. 引入OpenCV-Java库 在项目中引入OpenCV-Java库,可以从官网下对应的版本,引入后,我们就可以调用OpenCV-Java提供的API来实现人脸识别。 2. 人脸识别器 在使用OpenCV-Java实现人脸识别前,我们需要一个训练好的分类器,可以使用官方提供的人脸识别模型,或自己训练。过程如下: ``` CascadeClassifier faceDetector = new CascadeClassifier("haarcascade_frontalface_alt.xml"); ``` 3. 读取图片并识别人脸 分类器后,我们可以读取一张图片并进行人脸识别,具体实现代码如下: ``` Mat image = Imgcodecs.imread("test.jpg"); // 读取图片 Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY); // 转为灰度图 Imgproc.equalizeHist(image, image); // 直方图均衡化,提高图像质量 Rect[] faces = faceDetector.detectMultiScale(image); // 识别人脸 for (Rect rect : faces) { Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0)); // 绘制人脸框 } Imgcodecs.imwrite("result.jpg", image); // 保存结果 ``` 其中,`detectMultiScale` 方法用于检测出图像中的人脸,返回一个`Rect`类型的数组,每个元素代表一个人脸的位置和大小。 4. 运行程序 将以上代码放入一个Java类中,运行程序即可实现人脸识别。注意,需要引入`org.opencv.core.Mat`、`org.opencv.core.Rect`、`org.opencv.core.Point`、`org.opencv.core.Scalar`、`org.opencv.imgcodecs.Imgcodecs`、`org.opencv.imgproc.Imgproc`等OpenCV-Java的类。 希望能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值