OpenCV读取与写入图片的实现

1.读取图片

cv2.imread(filename, flags)
  • -filename: 文件名称
  • -flags: 0 读入灰度图片,1 读入彩色图片
cv2.imshow(winname, mat)
  • -winname: 窗口名字
  • -mat: 要展示的图片矩阵

cv2.waitKey(0):暂停程序,这样才能显示图片

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imshow('img', img)
cv2.waitKey(0)

2.图片写入

读取图片要经历四个步骤:

1.文件的读取
2.封装格式解析(jpg,png等格式)
3.数据解码
4.数据加载

这样读取的图片为图片的原始数据

cv2.imwrite(filename, img)
  • -filename: 图片名称
  • -img: 图片数据
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('img1.jpg', img)

True

2.1图像质量

1.jpg图片文件是以图片质量为代价进行压缩的,属于有损压缩

cv2.IMWRITE_JPEG_QUALITY: 表示当前的图片质量,压缩范围为0-100,不同压缩比对应不同的图片大小,下面我们来体验一下:

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 0])

True

原图像如下:

图片大小为400kb

压缩之后的图片为:

图片大小为40kb, 同时出现了严重的马赛克现象

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest2.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 50])

True

压缩之后的图片为:

图片大小为200kb,马赛克现象没那么的严重

2.png图片格式的压缩属于无损压缩,可以设置透明度

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest1.png', img)

True

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest2.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 0])

True

压缩之后的图像为:

图片大小为:5.92MB

import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest3.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 50])

True

图像大小变为2.34MB

由此可知,jpg图片文件图像质量的数值越低,压缩比越高,png图片文件图像质量的数值越低,压缩比越低

3.像素

像素:是指组成图像的小方格

RGB: 每一种颜色都是由RGB(red, green, blue)三种颜色组合而成的

颜色深度:比如,8bit 表示每种颜色的范围是0~255, 所以总共有256^3中颜色

图像宽高:表示在水平方向和竖直方向的像素点的个数

未压缩图片的计算方法: w * h * 颜色通道(3) * 8 bit / 8(B)

3.1像素读取与写入

每一个像素点都有3各部分组成,一般情况下,图片存储的格式为RGB, 但是opecv读取的图片为BGR格式

我们将图片的左上角的一列变为蓝色

import cv2
img = cv2.imread('img.jpg', 1)
(b, g, r) = img[100, 100] # 读取像素值
print(b, g, r)
#10,100 --- 110, 100
for i in range(1, 1000):
  img[10 + i][100] = (255, 0, 0)
cv2.imshow('imageBlue.png', img)
cv2.waitKey(0)

59 54 129

True

到此这篇关于OpenCV读取与写入图片的实现的文章就介绍到这了,更多相关OpenCV读取与写入图片内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • OpenCV中C++函数imread读取图片的问题及解决方法

    今天在用OpenCV实验Image Pyramid的时候发现一个奇怪的问题,就是利用C++函数imread读取图片的时候返回的结果总是空,而利用C函数cvLoadImage时却能读取到图像.代码如下: //环境:VS2010 + OpenCV 2.3.1 #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <math.h> #include <stdlib.h>

  • OPENCV批量读取图片实现方法

    如下所示: #include<opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { int num=4;//读取图片数量: char filename[100]; char windowname[100]; IplImage* pScr; unsigned char *Readfigsmethod1(int num);// 读入num个图片 { for (int i = 1; i <= num;

  • python使用opencv读取图片的实例

    安装好环境后,开始了第一个Hello word 例子,如何读取图片,保存图品 import cv2 import numpy as np import matplotlib.pyplot as plt #读取图片代码 img = cv2.imread('test.jpg',cv2.IMREAD_GRAYSCALE) #IMREAD_COLOR = 1 #IMREAD_UNCHANGED = -1 #展示图片 cv2.imshow('image',img) cv2.waitKey(0) cv2.d

  • OpenCV 使用imread()函数读取图片的六种正确姿势

    经常看到有人在网上询问关于imread()函数读取图片失败的问题.今天心血来潮,经过实验,总结出imread()调用的四种正确姿势. 通常我要获取一张图片的绝对路径是这样做的:在图片上右键--属性--安全--对象名称.然后复制对象名称就得到了图片的绝对路径. 如图: 然而这样得到的路径直接复制粘贴到vs里面会直接报错,如下: 可以看出我们获取的绝对路径的表示方法是单右斜线形式的.显然opencv的imread()不支持这种方式.但是!!!经过实验发现imread()除了不支持单右斜线形式,其他斜

  • OpenCV读取与写入图片的实现

    1.读取图片 cv2.imread(filename, flags) -filename: 文件名称 -flags: 0 读入灰度图片,1 读入彩色图片 cv2.imshow(winname, mat) -winname: 窗口名字 -mat: 要展示的图片矩阵 cv2.waitKey(0):暂停程序,这样才能显示图片 import cv2 img = cv2.imread("img.jpg", 1) cv2.imshow('img', img) cv2.waitKey(0) 2.图片

  • 关于opencv读取和写入路径有汉字的处理方式

    目录 opencv读取和写入路径有汉字的处理 读取图片 写入图片 opencv的imread不支持中文路径问题 实现很简单 opencv读取和写入路径有汉字的处理 读取图片  img_gt = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1)  img_gt = cv2.cvtColor(img_gt, cv2.IMREAD_COLOR) 写入图片 write_path=f'{save_dir}/{imgname}.jpg' cv2.imen

  • python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法

    如下所示: #coding=utf-8 #读取图片 返回图片某像素点的b,g,r值 import cv2 import numpy as np img=cv2.imread('./o.jpg') px=img[10,10] print px blue=img[10,10,0] print blue green=img[10,10,1] print blue red=img[10,10,2] print blue 以上这篇python opencv 读取图片 返回图片某像素点的b,g,r值的实现方

  • python读取并显示图片的三种方法(opencv、matplotlib、PIL库)

    前言 在进行图像处理时,经常会用到读取图片并显示出来这样的操作,所以本文总结了python中读取并显示图片的3种方式,分别基于opencv.matplotlib.PIL库实现,并给出了示例代码,介绍如下. OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上. 它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口

  • OpenCV基础操作指南之图片的读取与写出

    目录 1.进行图片读取的函数是:cv2.imread 2.图片保存的函数cv2.imwrite: 3.图片的显示函数cv2.imshow 附.OpenCV:读取图片总结 总结 1.进行图片读取的函数是:cv2.imread cv2.imread函数语法如下: cv2.imread(filename,flag=1) cv2.imread函数的参数解释: filename:所要读取图片的相对地址(与文件中open函数的读取方式一致) flag:设置读取的格式,默认为1,表示按照BGR三通道的方式进行

  • C++使用opencv读取图片的操作代码(图像处理)

    目录 代码理解 全部代码 读取结果 参考 代码理解 using namespace cv; 解释:加入此代码,后面就不需要在函数前加入cv:: 如从cv::imread(),可以直接写成imread() int main(int argc, char** argv) { return 0: } 解释: // argc是命令行,总的参数个数; argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数 // char *argv[] 用来取得你所输入的参数 /

  • PHP获取photoshop写入图片文字信息的方法

    本文实例讲述了PHP获取photoshop写入图片文字信息的方法.分享给大家供大家参考.具体分析如下: 有些摄影师喜欢把图片的标题,内容,关键词等用photoshop直接写入图片文件里面. 用以下代码可以读取. $image_info = array(); $size = getimagesize('图片文件.jpg', $info); if(isset($info['APP13'])) { $iptc = iptcparse($info['APP13']); foreach (array_ke

  • python读取并写入mat文件的方法

    先给大家介绍下python读取并写入mat文件的方法 用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); save matData.mat 用python3读取并写入mat文件: import scipy.io data = scipy.io.loadmat('matData.mat') # 读取mat文件 # print(data.keys()) # 查看mat文件中的所有变量 print(data['ma

  • 用openCV和Python 实现图片对比,并标识出不同点的方式

    最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Python 两个工具以及scikit-image和imutils两个库: 安装方法,在这里不多说,我安装的是Python3.6 和openCV2,安装方法网上自行百度谷歌: 进入正题: 新建一个新的Python文件并命名为copmarePicture.py,写入下面的代码: from skimage.m

随机推荐