【python版CV】—图像基本操作

简介: 【python版CV】—图像基本操作

1、数据读取-图像

  • cv2.IMREAD_COLOR:彩色图像
  • cv2.IMREAD_GRAYSCALE:灰度图像
#输出图像函数
def cv_show(name,img):
    cv.imshow(name, img)
    #等待时间,毫秒级别。0表示任意键终止,1000表示1000毫秒关闭
    cv.waitKey(0)
    cv.destroyAllWindows()#触发条件时,关闭


src=cv.imread("E:\\Pec\\12.jpg")
#shape求图片的长、宽以及像素颜色通道(B、G、R)
#把图像转化为灰度图
img=cv.imread("E:\\Pec\\12.jpg",cv.IMREAD_GRAYSCALE)
#cv_show("input",img)
#print(img)
print(src.shape)
print(img.shape)

#图像保存
cv.imwrite('hui12.jpg',img)

2、数据读取-视频

  • cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备

说明:视频就是图像中的每一帧的静止图像的连贯。

vc=cv.VideoCapture("E:\\Pec\\ved.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=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
        cv.imshow('result',gray)
        if cv.waitKey(10) & 0xFF==27:
            break
vc.release()
cv.destroyAllWindows()

3、截取部分图像数据(ROI)

#截取部分图像数据(ROI)
img=cv.imread('E:\\Pec\\cat.jpg')
#截取自己想要的切片
cat=img[100:300,0:200]
cv_show('cat',cat)

4、颜色通道提前

#颜色通道提取
img=cv.imread('E:\\Pec\\cat.jpg')
b,g,r=cv.split(img)
print(r.shape)
#将分离的颜色通道再组合
img=cv.merge((b,g,r))
print(img.shape)
#只保留R通道
cur_img=img.copy()
cur_img[:,:,0]=0 #取所有区域,把B设置0
cur_img[:,:,1]=0 #取所有区域,把G设置0
cv_show('R',cur_img)
#只保留G通道
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,2]=0
cv_show('G',cur_img)
#只保留B通道
cur_img=img.copy()
cur_img[:,:,1]=0
cur_img[:,:,2]=0
cv_show('B',cur_img)

5、边界填充

说明:把原有图像扩大一点

填充的类型:

  • 1、BORDER_REPLICATE:复制法,复制最边缘像素
  • 2、BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制,如:fedcba|abcdefgh|hgfedcb
  • 3、BORDER_REFLECT_101:反射法,以最边缘像素为轴,如:gfedcb|abcdefgh|gfedcba
  • 4、BORDER_WRAP:外包装法,如:cdefgh|abcdefgh|abcdefg
  • 5、BORDER_CONSTANT:常量法,常数填充
# 边界填充
top_size,bottom_size,left_size,right_size=(50,50,50,50)#图像上下左右各填充50
replicate=cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv.BORDER_REPLICATE)
reflect=cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv.BORDER_REFLECT)
reflect101=cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv.BORDER_REFLECT_101)
wrap=cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv.BORDER_WRAP)
constant=cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv.BORDER_CONSTANT,value=0)

plt.subplot(231),plt.imshow(img),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant),plt.title('CONSTANT')
plt.show()

补充:plt.show与plt.imshow与cv2.imshow区别

plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能单独显示,后面跟着plt.show()才能显示出来

如果需要展示读入的图像,或者展示对读入图像进行一系列操作后的图像时,使用cv2.imshow();如果不需要展示图像,而是绘制一个新的图像,使用plt.imshow()。需要注意的是,opencv是BGR通道,plt默认RGB通道

6、数值计算

针对图像的数值计算,可以分一下几种

#数值计算
img_cat1=img+50
print(img[:5,:,0])#[:5,:,0]表示只展示第一列像素值
print(img_cat1[:5,:,0])
img_cat2=img+img_cat1
print(img_cat2[:5,:,0])
print(cv.add(img,img_cat1)[:5,:,0])

(1)需要增加像素值,类似于数值计算

[[111 111 111 ...  50  50  50]
 [110 110 110 ...  50  50  50]
 [110 110 110 ...  51  51  51]
 [111 111 111 ...  52  52  52]
 [112 112 112 ...  52  52  52]]
[[161 161 161 ... 100 100 100]
 [160 160 160 ... 100 100 100]
 [160 160 160 ... 101 101 101]
 [161 161 161 ... 102 102 102]
 [162 162 162 ... 102 102 102]]

(2)若像素值相加超过255,就要对256求余

[[ 16  16  16 ... 150 150 150]
 [ 14  14  14 ... 150 150 150]
 [ 14  14  14 ... 152 152 152]
 [ 16  16  16 ... 154 154 154]
 [ 18  18  18 ... 154 154 154]]

(3)若用函数add(),超过255像素值,直接取最大值

[[255 255 255 ... 150 150 150]
 [255 255 255 ... 150 150 150]
 [255 255 255 ... 152 152 152]
 [255 255 255 ... 154 154 154]
 [255 255 255 ... 154 154 154]]

7、图像融合

说明:若是两个不同的图像直接相加融合,会报下面错误

此时:需要调整一张图像的像素值,与另一张像素值吻合

#图像融合
src=cv.imread("E:\\Pec\\12.jpg")
print(src.shape)
print(img.shape)
src=cv.resize(src,(640,426))
print(src.shape)

图像尺寸变换的其他操作:

(1)x轴延长3倍

res=cv.resize(img,(0,0),fx=3,fy=1)
plt.imshow(res)
plt.show()
#同理y轴

(2)两张图片融合

res=cv.addWeighted(img,0.4,src,0.6,0)
cv_show("input",res)


相关文章
|
3月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
109 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
12天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
82 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
56 3
|
2月前
|
存储 JSON API
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
64 7
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
|
3月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
140 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
3月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
115 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
2月前
|
JSON API 数据格式
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
57 0
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)
|
4月前
|
机器学习/深度学习 人工智能 TensorFlow
利用Python和TensorFlow实现简单图像识别
【8月更文挑战第31天】在这篇文章中,我们将一起踏上一段探索人工智能世界的奇妙之旅。正如甘地所言:“你必须成为你希望在世界上看到的改变。” 通过实践,我们不仅将学习如何使用Python和TensorFlow构建一个简单的图像识别模型,而且还将探索如何通过这个模型理解世界。文章以通俗易懂的方式,逐步引导读者从基础到高级,体验从编码到识别的整个过程,让每个人都能在AI的世界中看到自己的倒影。
|
4月前
|
机器学习/深度学习 自动驾驶 计算机视觉
使用Python实现简单的图像识别
【8月更文挑战第31天】在本文中,我们将探索如何使用Python语言和其强大的库来创建一个简单的图像识别系统。通过逐步指导,我们将了解如何准备图像数据,选择和训练模型,以及评估我们的成果。无论你是机器学习的初学者还是希望扩展你的技能集,这篇文章都将为你提供实用的知识和代码示例。
|
4月前
|
机器学习/深度学习 人工智能 算法框架/工具
使用Python构建简单神经网络进行图像识别
【8月更文挑战第31天】在本文中,我们将探索如何利用Python编程语言和深度学习框架Keras来搭建一个简单的神经网络模型。通过这个模型,我们能够实现基础的图像识别功能。文章将引导读者了解神经网络的基本概念,手把手教学如何准备数据集、构建网络结构、训练模型以及评估结果。最终,我们将看到即使是简单的神经网络也能在处理图像识别任务时展现出惊人的能力。