Python OpenCV 图像改变

打印 上一主题 下一主题

主题 838|帖子 838|积分 2514

更改图像数据

通过 改像素点 或者 切片的区域
  1. import cv2
  2. import numpy as np       
  3. img = cv2.imread("image.jpg")
  4. print(img[3,5])            # 显示某位置(行3列5)的像素值( 如 [53 34 29] 它是有三通道 B G R 组成)
  5. img[3,5] = (0,0,255)       # 更改该位置的像素
  6. img[0:100,100:200,0]   = 255 # 更改区域(0~100行 100~200列) B通道的值为255
  7. img[100:200,200:300,1] = 255
  8. img[200:300,300:400,2] = 255           
  9. cv2.imshow('changeData',img)  # 显示可看到图像有 蓝色 绿色 红色的方块区域
  10. cv2.waitKey(2000)
复制代码
图像通道分离

  1. #---方式一(opencv自带的函数)
  2. import cv2
  3. import numpy as np       
  4. img = cv2.imread("image.jpg")  
  5. b, g, r = cv2.split(img)  # 分离为blue,green ,red 三色通道(注:opencv 通道顺序是BGR,而不是主流的RGB)
  6.                           # img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)  调整通道顺序为RGB
  7.                           # 只分离一个 b = cv2.split(img)[0]   0:b 1:g 2:r                          
  8. cv2.imshow("Blue", r)  
  9. print(r.shape)            # (240,320)
  10. cv2.imshow("Red", g)  
  11. cv2.imshow("Green", b)  
  12. cv2.waitKey(0)
  13. #---方式二(numpy的函数)
  14. import cv2
  15. import numpy as np       
  16. img = cv2.imread("image.jpg")  
  17. print(img.shape)  
  18. r = np.zeros((img.shape[0],img.shape[1]), dtype=img.dtype)   #//创建numpy空间
  19. r[:,:] = img[:,:,2]    #//拷贝r通道的数据
  20.   
  21. cv2.imshow("Red", r)  
  22. cv2.waitKey(0)  
复制代码
图像通道合并

  1. import cv2
  2. import numpy as np               
  3. img = cv2.imread("image.jpg")
  4. b, g, r = cv2.split(img)
  5. merged = cv2.merge([b,g,r])  # 合并通道,如果换成 [r, g, b]就和原图像不一样了
  6. print(merged.shape)      # (240, 320, 3)   合并后顺序是(高度 宽度 通道数)
  7. cv2.imshow("Merged", merged)
  8. cv2.waitKey(0)
复制代码
图像拼接

  1. import os
  2. import cv2
  3. import numpy as np
  4. def mergePic(files):
  5.     baseimg= cv2.imread(files[0])
  6.     for file in files[1:]:  # 遍历除第一个外的numpy
  7.         img=cv2.imread(file)
  8.         baseimg=np.append(baseimg,img,axis=1)   # 横向追加图像(axis=0时为纵向)
  9.     cv2.imwrite('mergeCv2.png',baseimg)
  10. path = "./pic/" # 注:该路径下的图像,必须是相同格式,尺寸的图像
  11. images = []  #先存储所有的图像的名称
  12. for root, dirs, files in os.walk(path):
  13.     for f in files :
  14.         images.append(path+f)
  15. print(images,len(images))
  16. mergePic(images)
复制代码
图像混合(虚化后混合)

  1. import cv2
  2. import numpy as np
  3. img1=cv2.imread('image.jpg')
  4. img2=cv2.imread('opencv_logo.jpg')
  5. img2 = cv2.resize(img2,(img1.shape[1],img1.shape[0])) # 注意opencv的resize和shape是反的
  6. print(img1.shape,img1.size,img1.dtype)
  7. print(img2.shape,img2.size,img2.dtype)
  8. dst=cv2.addWeighted(img1,0.7,img2,0.3,0) # 注:不同尺寸会报错,可采用resize或roi方式处理
  9. # 0.7/0.3为图像混合占的比重,在0通道
  10. cv2.imshow('dst',dst)
  11. cv2.waitKey(0)
复制代码
缩放、旋转和裁剪

  1. import cv2
  2. # 打开图像
  3. image = cv2.imread('example.jpg')
  4. # 缩放图像
  5. scaled_image = cv2.resize(image, (500, 500))
  6. # 旋转图像
  7. rotated_image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
  8. # 裁剪图像
  9. cropped_image = image[100:300, 100:300]
  10. # 显示变换后的图像
  11. cv2.imshow('Scaled Image', scaled_image)
  12. cv2.imshow('Rotated Image', rotated_image)
  13. cv2.imshow('Cropped Image', cropped_image)
  14. cv2.waitKey(0)
  15. cv2.destroyAllWindows()
复制代码
图像平移

  1. import cv2
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. img = cv2.imread('image.jpg')
  5. H = np.float32([[1,0,100], # 创建变换矩阵,100:沿x轴移动距离 50:沿y轴移动距离
  6.                 [0,1,50]])
  7. rows,cols = img.shape[:2]  # 取图片的行数和列数(开始到2之间,即shape[0] shape[1])
  8. newImg = cv2.warpAffine(img,H,(rows,cols)) # 仿射变换
  9.                                         # img:变换前图像
  10.                                         # H:变换矩阵
  11.                                         # (rows,cols)):变换后的大小
  12. plt.subplot(121) # 子图 1行2列1象限
  13. plt.imshow(img)
  14. plt.subplot(122) # 子图 1行2列2象限
  15. plt.imshow(newImg)
  16. plt.show()       # 显示 matplotlib图
复制代码

cv2.warpAffine() 是 OpenCV 中用于实验仿射变更的函数之一。它可以用来对图像进行平移、旋转、缩放等操纵
  1. import cv2
  2. import numpy as np
  3. # 读取图像
  4. image = cv2.imread('input_image.jpg')
  5. # 定义平移矩阵,这里将图像向右平移100像素,向下平移50像素
  6. tx = 100
  7. ty = 50
  8. translation_matrix = np.float32([[1, 0, tx],
  9.                                  [0, 1, ty]])
  10. # 执行仿射变换
  11. translated_image = cv2.warpAffine(image, translation_matrix, (image.shape[1], image.shape[0]))
  12. # 显示原始图像和平移后的图像
  13. cv2.imshow('Original Image', image)
  14. cv2.imshow('Translated Image', translated_image)
  15. cv2.waitKey(0)
  16. cv2.destroyAllWindows()
复制代码

图像增强

图像增强是指通过调整图像的亮度、对比度、饱和度等参数来改善图像质量。
使用OpenCV库的cv2.convertScaleAbs()函数来增强图像的对比度。
  1. import cv2
  2. # 打开图像
  3. image = cv2.imread('example.jpg')
  4. # 增强对比度
  5. enhanced_image = cv2.convertScaleAbs(image, alpha=1.5, beta=0)
  6. # 显示增强后的图像
  7. cv2.imshow('Enhanced Image', enhanced_image)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()
复制代码
图像复原

图像复原是指通过去除噪声、含糊等失真来恢复图像的原始质量。
使用OpenCV库的cv2.fastNlMeansDenoisingColored()函数来去除图像中的噪声。
  1. import cv2
  2. # 打开图像
  3. image = cv2.imread('noisy_image.jpg')
  4. # 去除噪声
  5. denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)
  6. # 显示去除噪声后的图像
  7. cv2.imshow('Denoised Image', denoised_image)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()
复制代码
图像旋转

  1. import cv2
  2. import matplotlib.pyplot as plt
  3. img = cv2.imread('image.jpg')
  4. rows,cols = img.shape[:2]
  5. M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1) # 2D矩阵旋转变换
  6.                                                   # 参1:旋转中心 参2:旋转角度  参3:缩放比例
  7. newImg = cv2.warpAffine(img,M,(rows,cols))  # 仿射变换
  8. plt.subplot(121)
  9. plt.imshow(img)
  10. plt.subplot(122)
  11. plt.imshow(newImg)       
  12. plt.show()
复制代码
图像拉伸

  1. import cv2
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. img = cv2.imread('image.jpg')
  5. rows,cols = img.shape[:2]
  6.        
  7. pts1 = np.float32([[50,50],[200,50],[50,200]])   # 变换前位置(通过三个点 来确定)
  8. pts2 = np.float32([[10,100],[200,50],[100,250]]) # 变换后位置(通过三个点 来确定)
  9. M = cv2.getAffineTransform(pts1, pts2) # 仿射变换(参1:变换前位置  参2:变换后位置)
  10.                                       
  11. res = cv2.warpAffine(img,M,(rows,cols))
  12. plt.subplot(121)
  13. plt.imshow(img)
  14. plt.subplot(122)
  15. plt.imshow(res)
  16. plt.show()
复制代码
图像滤波

图像滤波是图像处理中的一个基础任务,用于去除图像中的噪声和细节,增强感爱好的结构。
使用OpenCV库的cv2.fastNlMeansDenoisingColored()函数来去除图像中的噪声。
  1. import cv2
  2. # 打开图像
  3. image = cv2.imread('noisy_image.jpg')
  4. # 去除噪声
  5. denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)
  6. # 显示去除噪声后的图像
  7. cv2.imshow('Denoised Image', denoised_image)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()
复制代码
图像特性提取

图像特性提取是从图像中提取有用的信息,如边缘、角点、形状等。这些特性可以用于图像识别、图像检索等。
使用OpenCV库的cv2.Canny()函数来提取图像的边缘特性。
  1. import cv2
  2. # 打开图像
  3. image = cv2.imread('image_with_edges.jpg')
  4. # 应用边缘检测
  5. edges = cv2.Canny(image, 100, 200)
  6. # 显示边缘检测后的图像
  7. cv2.imshow('Edges', edges)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()
复制代码
图像分割

图像分割是将图像分成多个部分的过程,每个部分代表图像中的一个对象或区域。
使用OpenCV库的cv2.inRange()函数来根据颜色对图像进行分割。
  1. import cv2
  2. # 打开图像
  3. image = cv2.imread('colorful_image.jpg')
  4. # 创建颜色范围
  5. lower_red = (0, 50, 50)
  6. upper_red = (10, 255, 255)
  7. # 应用颜色分割
  8. mask = cv2.inRange(image, lower_red, upper_red)
  9. # 显示分割后的图像
  10. cv2.imshow('Mask', mask)
  11. cv2.waitKey(0)
  12. cv2.destroyAllWindows()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表