cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。
cv2.imencode()函数是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。
imdecode()使用
从网络读取图像数据并转换成图片格式:
# -*- coding: utf-8 -*-
import numpy as np
import urllib
import cv2
url = 'http://www.pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png'
resp = urllib.urlopen(url)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
cv2.imshow('URL2Image',image)
cv2.waitKey()
显示图片:
imencode()使用
将图片编码到缓存,并保存到本地:
# -*- coding: utf-8 -*-
import numpy as np
import urllib
import cv2
img = cv2.imread('0122.jpg')
# '.jpg'表示把当前图片img按照jpg格式编码,按照不同格式编码的结果不一样
img_encode = cv2.imencode('.jpg', img)[1]
# imgg = cv2.imencode('.png', img)
data_encode = np.array(img_encode)
str_encode = data_encode.tostring()
# 缓存数据保存到本地
with open('img_encode.txt', 'w') as f:
f.write(str_encode)
f.flush
imencode()+imdecode()使用
图片编码保存到本地,读取本地文件解码恢复成图片格式:
# -*- coding: utf-8 -*-
import numpy as np
import urllib
import cv2
img = cv2.imread('0122.jpg')
# '.jpg'表示把当前图片img按照jpg格式编码,按照不同格式编码的结果不一样
img_encode = cv2.imencode('.jpg', img)[1]
# imgg = cv2.imencode('.png', img)
data_encode = np.array(img_encode)
str_encode = data_encode.tostring()
# 缓存数据保存到本地,以txt格式保存
with open('img_encode.txt', 'w') as f:
f.write(str_encode)
f.flush
with open('img_encode.txt', 'r') as f:
str_encode = f.read()
nparr = np.fromstring(str_encode, np.uint8)
img_decode = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
cv2.imshow("img_decode", img_decode)
cv2.waitKey()
# -*- coding: utf-8 -*-
import numpy as np
import urllib
import cv2
img = cv2.imread('0122.jpg')
# '.jpg'表示把当前图片img按照jpg格式编码,按照不同格式编码的结果不一样
img_encode = cv2.imencode('.jpg', img)[1]
# imgg = cv2.imencode('.png', img)
data_encode = np.array(img_encode)
str_encode = data_encode.tostring()
# 缓存数据保存到本地,以txt格式保存
with open('img_encode.txt', 'w') as f:
f.write(str_encode)
f.flush
with open('img_encode.txt', 'r') as f:
str_encode = f.read()
image = np.asarray(bytearray(str_encode), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
cv2.imshow('img_decode',image)
cv2.waitKey()
cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。cv2.imencode()函数是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。imdecode()使用从网络读取图像数据并转换成图片格式:# -*- coding: utf-8 -*-i
问题: 使用
cv2
.
im
read读取含有中文路径的
图片
时,返回None。
原因:
opencv
不接受non-ascii的路径。
解决方法: 先用np.fromfile()读取为np.uint8格式,再使用
cv2
.
im
decode
()
解码
。
cv2
.
im
decode
(buf, flags)
# buf - Input array or vector of bytes.
# flags - The same flags as in
cv2
.
im
read().
# - >0 Return a 3
im
g =
cv2
.
im
read(
im
g_path)
# 取值范围:0~100,数值越小,压缩比越高,
图片
质量损失越严重
params = [
cv2
.
IM
WRITE_JPEG_QUALITY, ratio] # ratio:0~100
msg =
cv2
.
im
encode
(".jpg",
im
g, params)[1]
最近经常需要处理不同格式的图像数据,图像的编
解码
也是其中之一,正好
OpenCV
提供了对应的操作工具,就方便了很多了,这里将具体的实践做成了一个小demo放在这里,可供参考使用,主要就是读取本地
图片
编码
存储文件,之后读取文件数据
解码
为图像数据,相应的注释都在代码中了,下面是详细实现:
#!usr/bin/env
python
#encoding:utf-8
from __future__
im
port division
__Author__:沂水寒城
功能:
OpenCV
图像编
解码
操作...
opencv
读取&裁剪&写入
图片
1.英文路径1.1 导包1.2 找到英文路径1.3 英文路径读取1.4 图像白边裁剪1.5 英文路径写入1.6 结果展示2.直接读取中文路径2.1 常见问题3. 正确读取中文路径3.1 导包3.2 找到中文路径3.3 正确读取中文路径3.4 图像白边裁剪
1.英文路径
1.1 导包
im
port
cv2
1.2 找到英文路径
eng_path = r"fruit1/cuitao/cuitao-19453282-321255571.png"
1.3 英文路径
cv2
.
im
decode
(…)/
cv2
.
im
encode
(…)传入参数为包含图像文件内容的内存buffer
语法如下:
<1>
im
decode
(buf, flags)
buf: 包含图像文件的buffer
flags: 以何种形式解析图像,与
cv2
.
im
read(filename[, flags])中参数一致
https://blog.csdn.net/spadgerz/article/details/103145959
im
ag(a,b,c)
分别是
图片
的height,wide , channel(高,宽,通道数)
b =
im
age[:,:,0]#得到蓝色通道
g =
im
age[:,:,1]#得
cv2
.
im
decode
#从内存中的缓冲区读取图像。
cv2
.
im
encode
# 将图像
编码
到内存缓冲区中。
.tofile # 将数组中的数据以二进制格式写进文件
np.fromfile # 从文本或二进制文件中的数据构造数组。
im
decode
(buf, flags) -> retval
im
encode
(ext,
im
g[, params]) -> retval, buf
from
cv2
\__init__.py
def
im
encode
(ext,
im
g, params=None): # real signature unknown; restored from __doc__
im
encode
(ext,
im
g[, params]) -> retval, buf
. @brief
Encode
s an
im
age int...
cv2
.
im
read只能读取英文路径下的
图片
,若要读取中文路经下的
图片
需要用
cv2
.
im
decode
,否则读取到的
图片
内容为none,
cv2
.
im
decode
也可以用来读取英文路径下的
图片
im
port
cv2
im
port numpy as np
im
_path = 'F:\\test\\frame1.jpg'
im
=
cv2
.
im
read(
im
_path)#用于读...
学习内容颜色空间RGBYUVYCbCr
cv2
.
im
read(
im
g_oath, flag)[..., 0]
cv2
.
im
encode
()
cv2
.
im
decode
()np.newaxisPSNR(Peak Signal-to-Noise Ratio) 峰值信噪比SS
IM
(Structural S
IM
ilarity) 结构相似性
红绿蓝三个通道。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开
在 YUV空间中,
OpenCV
是一个广泛应用于计算机视觉领域的
Python
工具包。通过安装
opencv
-
python
39环境,可以在
Python
中使用
OpenCV
的各种功能以实现图像和视频处理、模式识别、目标检测等计算机视觉应用。
要安装
opencv
-
python
39,需要先安装
Python
3环境和pip,接着在终端中运行以下命令:
pip install
opencv
-
python
-headless
该命令会自动从
Python
包索引中下载并安装
OpenCV
的
Python
包。其中,headless版仅包含
OpenCV
的核心功能,因此体积较小,下载速度也更快。
安装完成后,可以在
Python
中通过以下代码测试
OpenCV
是否成功安装:
im
port
cv2
print(
cv2
.__version__)
这段代码会输出当前安装的
OpenCV
版本号。若顺利输出版本号,则安装成功。
如果需要使用
OpenCV
的其他功能,如GUI界面、视频编
解码
等,则可以安装以下组件:
pip install
opencv
-contrib-headless
pip install
opencv
-
python
-headless-ffmpeg
这些组件会给
OpenCV
添加更多特定功能,并提供更广泛的支持。但这些组件也会增加
OpenCV
的体积和下载时间。因此,可以根据需要安装所需的组件。
总之,通过以上步骤,可以快速方便地安装
OpenCV
并开始使用。但在实际应用中,常常需要根据具体需求进行更深入的配置和调整,以实现更高效、精确的计算机视觉应用。
weixin_56459510:
C#项目中操作Excel文件——使用NPOI库
weixin_56459510: