OpenCv-Python 图像处理基本操作

1. 图片加载、显示和保存

import cv2

img = cv2.imread("01.jpg")
imgGrey = cv2.imread("01.jpg",0)
cv2.imshow("img",img)
cv2.imshow("imgGrey",imgGrey)
cv2.waitKey()
cv2.imwrite("Copy.jpg",img)


2. 图像显示窗口创建与销毁

cv2.namedWindow(窗口名,属性) 创建一个窗口

属性—指定窗口大小模式:

cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小
cv2.WINDOW_NORMAL:窗口大小可调整
cv2.destoryAllWindows(窗口名) 删除任何建立的窗口

 

import cv2

img = cv2.imread("01.jpg")

cv2.namedWindow("img",cv2.WINDOW_NORMAL)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

 


3. 图片宽、高、通道数、平均值获取

 

img.shape 返回图像高(图像矩阵的行数)、宽(图像矩阵的列数)和通道数3个属性组成的元组,若图像是非彩色图,则只返回高和宽组成的元组。

 

import cv2
import numpy as np

img = cv2.imread("01.jpg")
imgGrey = cv2.imread("01.jpg",0)

sp1 = img.shape
sp2 = imgGrey.shape

mean_img_value = np.mean(img)

print(sp1)
print(sp2)
print(mean_img_value)

 

 

4. 图像像素数目和图像数据类型获取

图像矩阵img的size属性和dtype分别对应图像的像素总数目和图像数据类型。一般情况下,图像的数据类型是uint8。

import cv2

img = cv2.imread("01.jpg")

imgSize = img.size
print(imgSize)

ty = img.dtype
print(ty)

 

5. 生成指定大小的空图像


使用numpy.zeros()函数生成指定大小的空图像

# Created by CSDN muye
import cv2
import numpy as np

img = cv2.imread("01.jpg")
imgZero = np.zeros(img.shape,np.uint8)

# 第一个是高,第二个是宽
imgFix = np.zeros((300,500,3),np.uint8)
# imgFix = np.zeros((300,500),np.uint8)

cv2.imshow("img",img)
cv2.imshow("imgZero",imgZero)
cv2.imshow("imgFix",imgFix)
cv2.waitKey()

 

6. 访问和操作图像像素

 

OpenCV中图像矩阵的顺序是B、G、R。可以直接通过坐标位置访问和操作图像像素。

import cv2

img = cv2.imread("01.jpg")

numb = img[50,100]
print(numb)

img[50,100] = (0,0,255)
cv2.imshow("img",img)
cv2.waitKey()

分开访问图像某一通道像素值也炒鸡方便:

import cv2

img = cv2.imread("01.jpg")

第一个是高,第二个是宽
img[0:100,100:200,0] = 255
img[100:200,200:300,1] = 255
img[200:300,300:400,2] = 255

img_roi = img[0:100, 0:200]

cv2.imshow("img",img)
cv2.waitKey()


嗯,不得不说Python是一个很神奇的存在。

Python中,更改图像某一矩形区域的像素值也很方便:

import cv2

img = cv2.imread("01.jpg")

img[0:50,1:100] = (0,0,255)

cv2.imshow("img",img)
cv2.waitKey()

 

7. 图像三通道分离和合并

 

分离图像通道可以使用cv2中的split函数,合并使用merge函数。

import cv2

img = cv2.imread("01.jpg")

b , g , r = cv2.split(img)

# b = cv2.split(img)[0]
# g = cv2.split(img)[1]
# r = cv2.split(img)[2]

merged = cv2.merge([b,g,r])

cv2.imshow("Blue",b)
cv2.imshow("Green",g)
cv2.imshow("Red",r)

cv2.imshow("Merged",merged)
cv2.waitKey()

 


8. 在图像上输出文字


使用putText函数在图片上输出文字,函数原型:
putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

  • img: 图像
  • text:要输出的文本
  • org: 文字的起点坐标
  • fontFace: 字体
  • fontScale: 字体大小
  • color: 字体颜色
  • thickness: 字图加粗

 

import cv2

img = cv2.imread("01.jpg")

cv2.putText(img,"Print some text to img",(100,100),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255))

cv2.imshow("img",img)
cv2.waitKey()

 


9. 图像缩放

 

缩放使用cv2.resize()函数,resize函数里的size第一个是宽(列),第二个是高(行)。

import cv2

img = cv2.imread("01.jpg")
cv2.imshow("img",img)

img1 = cv2.resize(img,(300,100),cv2.INTER_AREA)

hight, width = img.shape[0:2]
img2 = cv2.resize(img,(width,hight))

cv2.imshow("img1",img1)
cv2.imshow('img2',img2)

cv2.waitKey()

"cv2.INTER_AREA"是定义的缩放插值方法。共有5种:

  • 1)INTER_NEAREST - 最近邻插值法
  • 2)INTER_LINEAR - 双线性插值法(默认)
  • 3)INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
  • 4)INTER_CUBIC - 基于4x4像素邻域的3次插值法
  • 5)INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值

为了最好的缩放效果,缩小推荐使用 "cv2.INTER_AREA";  扩大推荐使用 “cv2.INTER_CUBIC”

 

10.  图像遍历

 

import cv2

img = cv2.imread('0021.jpg')
height = img.shape[0]
weight = img.shape[1]
channels = img.shape[2]

for row in range(height):  # 遍历高
    for col in range(weight):  # 遍历宽
        for c in range(channels):  # 遍历各通道
            value = img[row, col, c]
            imgs[row, col, c] = 255-imgs[row, col, c]  #操作像素

cv2.imshow('result',imgs)
cv2.waitKey()

 

11. 大津阈值 

 

import cv2

img = cv2.imread('timg.jpg',0)  # 按灰度图读入

# ret 是自动选择的大津分割阈值    img_binary 是二值化图像
ret, img_binary = cv2.threshold(img,0,255,cv2.THRESH_OTSU)   # 大津阈值

# ret, binary = cv.threshold(img, 100, 255, cv.THRESH_BINARY) # 指定阈值

cv2.imshow('Source image',img)
cv2.imshow('THRESH_OTSU',img_binary)

cv2.waitKey()

 

12. 拼接视频

# -*- coding:utf8 -*-
# csdn -牧野- 2020-6-12
import cv2
import numpy as np

# 视频文件名字
filename1 = 'filename1.mp4'
filename2 = 'filename2.mp4'

# 开始读视频
videoCapture1 = cv2.VideoCapture(filename1)
videoCapture2 = cv2.VideoCapture(filename2)

fps = videoCapture1.get(cv2.CAP_PROP_FPS)

success1, frame1 = videoCapture1.read()
success2, frame2 = videoCapture2.read()

H, W, _ = frame1.shape
size = (W*2, H)
videowriter = cv2.VideoWriter('filename.mp4', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), fps, size)

while True:
    success1, frame1 = videoCapture1.read()
    success2, frame2 = videoCapture2.read()

    imgFix = np.zeros((H,W*2, 3), np.uint8)
    if frame1.shape!=frame2.shape:
        frame1 = cv2.resize(frame1, (W, H))
    imgFix[:H, :W] = frame1
    imgFix[:H,W:2*W] = frame2
    videowriter.write(imgFix)

    if not success1 or not success2:
        print('video is all read')
        break

 

  • 15
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
非常好的问题!我可以告诉你一些关于使用opencv-python进行图像处理的基本知识。 首先,确保你已经安装了opencv-python库。你可以使用以下命令在Python中安装它: ``` pip install opencv-python ``` 导入库后,你可以开始处理图像。下面是一个简单的例子,展示了如何读取、显示和保存图像: ```python import cv2 # 读取图像 image = cv2.imread('image.jpg') # 显示图像 cv2.imshow('Image', image) cv2.waitKey(0) # 保存图像 cv2.imwrite('image_output.jpg', image) ``` 在这个例子中,`imread`函数用于从文件中读取图像。`imshow`函数用于显示图像,`waitKey`函数可以等待按键输入。最后,`imwrite`函数用于将图像保存到文件中。 除了基本操作opencv-python还提供了许多图像处理函数,如图像缩放、旋转、裁剪、滤波、边缘检测等。下面是一个简单的例子,展示了如何进行图像缩放和灰度转换: ```python import cv2 # 读取图像 image = cv2.imread('image.jpg') # 缩放图像 resized_image = cv2.resize(image, (800, 600)) # 灰度转换 gray_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY) # 显示图像 cv2.imshow('Resized Image', resized_image) cv2.imshow('Gray Image', gray_image) cv2.waitKey(0) ``` 在这个例子中,`resize`函数用于缩放图像,`cvtColor`函数用于将图像转换为灰度图像。 希望这些例子能帮助你入门opencv-python图像处理!如果你有更具体的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值