OpenCV笔记

这篇博客详细记录了OpenCV的使用,包括安装、报错解决、图像读取与导出、图像操作如大小调整、阈值处理、绘图等,还涉及了高级功能如边缘检测、滤波器和视频处理。此外,还讲解了如何在内存中处理图像以及旋转、显示图片等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总参考1 这是很不错的官方文档。
总参考2 最好是通过谷歌来查里面想要的官方教程。
总参考3 中文翻译的博客。

x、安装:

《python安装》
源码路径:如果用pycharm通过ctrl+左键 到达的 ~/.PyCharm2018.2/system/python_stubs/677015232/cv2/里面实际都是引用,没有真正的代码。这个地址是python2安装的目录下才有真正的代码 ~/anaconda2/lib/python2.7/site-packages/cv2/ ,但你会发现只有一个库 cv2.so ,我猜测里面是c++写好了编译出来的。python只能调用这个库,不能改源码。
(1)普通版本: 参考
pip install opencv-python
(2)Contrib版。不稳定的东西放到OpenCV_contrib里了,普通版本是没有的。 参考
pip install opencv-contrib-python
比如该版本才有引导滤波等板块:
from cv2.ximgproc import guidedFilter

《源码安装》
可以考虑用同事推荐的 opencv 2.4.13版本 或者现在网上的 3.x 版本。
github官方源码

x、报错及解决办法

(1)RuntimeWarning: overflow encountered in ubyte_scalars 像素加减运算溢出异常 参考
原因:ubyte类型数据范围为0~255,若做运算出现负值或超出255,则会抛出异常。
解法:转换下为int16或浮点就行了。

1、读取图片 imread

(1)Python
参考
img = cv2.imread(‘messi5.jpg’,0) # 0代表灰度模式,每个像素有一个0(黑色)到255(白色)之间的亮度值 灰度概念参考。 默认是1 代表以RGB格式读取。-1代表以原始图像读取(包括alpha通道,即透明度的通道)。

如果报错:Premature end of JPEG file 这很可能是图片损坏了的问题,因为不能try catch解决这错误。目前我自己的解决办法是:打印日志或 print 图片名字出来,然后就对应地删除图片。

(2)C++
参考1 参考2
C++: Mat imread(const string& filename, int flags=1 ) 返回的数据结构是Mat,如果想获取图片大小,可以用

width = img.rows;
height = img.cols;

2、导出图片 imwrite

(1)基本知识
np.unique(picture) # 如果 0 代表黑色,255代表高亮
cv2.imwrite("~/my_picture.jpg", picture*255) # 上面只有0 1两种数值时,就需要乘以255。

如果返回False,很可能是不能写 ~ 等的相对地址或简称,一定要绝对地址。
(2)报错:
could not find a writer for the specified extension in function imwrite_
这是因为输出地址的后缀名需要合理。估计会根据后缀名来选择压缩图片策略。

3、一张图像就是NumPy中的数组

OpenCV for Python就是通过NumPy进行绑定的,一张图像就是NumPy中的数组。所以创建图片就是创建np数组。
参考

canvas = np.zeros((300,300,3),dtype=“uint8”) # 全黑的图片
canvas = 255 * np.ones((300,300,3),dtype=“uint8”) # 全白的图片

(1)获取一张图片的大小

参考

print(img.shape) # 格式:(高, 宽, 通道数)

4、显示图片

(1)cv.WaitKey(delay=0) 参考
waitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。输入任意键退出,返回值与输入值相同。
delay 用于视频模式,显示完一帧图像后程序等待"delay"ms再显示下一帧视频。显示图片直接=0就好。

img = cv2.imread("D:\\cat.jpg")
cv2.namedWindow("Image")
cv2.imshow("Image", img.astype(np.uint8)) # 如果本来就是uint8就不用astype,否则图片会全花。
cv2.waitKey(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值