PyOpenCV 基本操作

 

目录

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

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

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

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

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

6. 访问和操作图像像素

 

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

8. 抓取摄像头


 

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

import cv2
# 生成图片
img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
# 生成灰色图片
imgGrey = cv2.imread("1.jpg", 0)
#  展示原图
cv2.imshow("img", img)
#  展示灰色图片
#cv2.imshow("imgGrey", imgGrey)
#  等待图片的关闭
cv2.waitKey(0)
# 保存灰色图片
#cv2.imwrite("Copy.jpg", imgGrey)

 

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

    cv2.namedWindow(窗口名,属性) 创建一个窗口,属性—指定窗口大小模式:

    cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小

    cv2.WINDOW_NORMAL:窗口大小可调整

    cv2.destoryAllWindows(窗口名) 删除任何建立的窗口

 

import cv2

# 生成图片

img = cv2.imread(r'C:\Users\Desktop\test1.jpg')

cv2.namedWindow("img", cv2.WINDOW_NORMAL)

cv2.imshow("img", img)

cv2.waitKey()

cv2.destroyAllWindows()

 

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

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

import cv2

img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
imgGray = cv2.imread(r'C:\Users\Desktop\test1.jpg', 0)


print('****img*****)
print( img.shape)
print('width: ', img.shape[0])
print('heigh: ', img.shape[1])
print('channel: ', img.shape[2])


print('\n\n***imgGray**')
print(imgGray.shape)
print('width: ', imgGray.shape[0])
print('heigh: ', imgGray.shape[1])
print('channel: ', imgGray.shape[2])

 

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

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

import cv2

img = cv2.imread(r'C:\Users\Desktop\test1.jpg')

print('图像类型: ', type(img))
print('图像像素点数: ', img.size)
print('图像像素灰度值类型:', img.dtype)

 

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

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
imgZero = np.zeros(img.shape, np.uint8)
imgFix = np.zeros((300, 500, 3), np.uint8)

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

6. 访问和操作图像像素

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

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\Desktop\test1.jpg')

pixel_50_100 = img[50, 100]
#返回3个值,分别是该像素点在BGR通道的值
print(pixel_50_100)


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

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

分开访问图像某一通道像素值也very方便

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\Desktop\test1.jpg')

img[0:100, 100:200, 0] = 255
img[100:200, 200:300, 1] = 255
img[200:300, 300:400, 2] = 255

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

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

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
img[0:50, 1:100] = (0, 0, 255)

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


 

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

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\Desktop\test1.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. 抓取摄像头

import cv2
import numpy as np

cap  = cv2.VideoCapture(0)

for i in range(0, 19):
     print(cap.get(i)) 

while(1):
    ret, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_blue = np.array([100, 47, 47])
    upper_blue = np.array([124, 255,255])

    mask = cv2.inRange(hsv, lower_blue, upper_blue) #蓝色掩模
    res = cv2.bitwise_and(frame, frame, mask = mask)

    cv2.imshow(u"Capture", frame)
    cv2.imshow(u"mask", mask)
    cv2.imshow(u"res", res)

    key = cv2.waitKey(1)
    if key & 0xff == ord('q') or key == 27:
         print(frame.shape,ret)
         break

cap.release()
cv2.destroyAllWindows()

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源计算机视觉库,它提供了许多用于图像处理和计算机视觉任务的函数和工具。它可以用于在Python中进行图像和视频处理,如图像识别、目标检测和人脸识别等任务。 在Python中,OpenCV的官方模块名为cv2,而不是cv。因此,在导入OpenCV时应使用import cv2而不是import cv。如果在命令行中导入cv时出错,可能是因为没有安装OpenCV或者安装的版本不正确。解决这个问题的方法是下载并安装正确版本的OpenCV。 在最新版本的OpenCV中,cv2.cv这个属性已经被移除了,因此不能使用cv2.cv来访问相应的属性或方法。如果你希望获取视频的帧率,你可以使用videocapture.get(cv2.CAP_PROP_FPS)来替代videocapture.get(cv2.cv.CV_CAP_PROP_FPS)。 总结来说,OpenCV是一个用于计算机视觉的开源库,在Python中通常使用cv2模块来进行图像和视频处理。如果遇到导入cv出错的情况,可能是因为没有正确安装OpenCV或者使用了错误的模块名。在最新版本的OpenCV中,cv2.cv这个属性已经被移除,应使用cv2.CAP_PROP_FPS来获取视频的帧率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python, opencv, cv2](https://blog.csdn.net/summermaoz/article/details/67637325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值