首页 > 编程语言 >opencv-python笔记(1)

opencv-python笔记(1)

时间:2023-03-14 21:03:44浏览次数:39  
标签:src img python cv2 dst 滤波 笔记 opencv 图像

openCV笔记

图像

灰度图像

​ 0代表纯黑色,255代表白色(类似亮度)

通道拆分

通过索引拆分:
import cv2
lena=cv2.imread("lenacolor.png")
cv2.imshow("lena1",lena)
b=lena[:,:,0]
g=lena[:,:,1]
r=lena[:,:,2]
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
lena[:,:,0]=0
cv2.imshow("lenab0",lena)
lena[:,:,1]=0
cv2.imshow("lenab0g0",lena)
cv2.waitKey()
cv2.destroyAllWindows()
通过cv2.split()函数拆分:
import cv2
lena=cv2.imread("lenacolor.png")
b,g,r=cv2.split(lena)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()

图像属性

获取图像属性

shape:如果是彩色图像,则返回包含行数、列数、通道数的数组;如果是二值图像或 者灰度图像,则仅返回行数和列数。通过该属性的返回值是否包含通道数,可以判断一 幅图像是灰度图像(或二值图像)还是彩色图像。

size:返回图像的像素数目。其值为“行×列×通道数”,灰度图像或者二值图像的通道 数为 1。

dtype:返回图像的数据类型。

如:

import cv2
gray=cv2.imread("lena.bmp",0)
color=cv2.imread("lenacolor.png")
print("图像 gray 属性:")
print("gray.shape=",gray.shape)
print("gray.size=",gray.size)
print("gray.dtype=",gray.dtype)
print("图像 color 属性:")
print("color.shape=",color.shape)
print("color.size=",color.size)
print("color.dtype=",color.dtype)
重置图像属性
import cv2 as cv
 
# 读入原图片
img = cv.imread('test.jpg')
# 打印出图片尺寸
print(img.shape)
# 将图片高和宽分别赋值给x,y
x, y = img.shape[0:2]
# 显示原图
cv.imshow('OriginalPicture', img)
# 缩放到原来的二分之一,输出尺寸格式为(宽,高)
img_test1 = cv.resize(img, (int(y / 2), int(x / 2)))
cv.imshow('resize0', img_test1)
cv.waitKey()

# 最近邻插值法缩放
# 缩放到原来的四分之一
img_test2 = cv.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST)
cv.imshow('resize1', img_test2)
cv.waitKey()
cv.destroyAllWindows()

图像运算

图像相加

直接加法运算:a+b=mod(a+b,256)

使用cv2.add:大于255则饱和

图像加权:使用cv2.addWeighted函数

​ dst=cv2.addWeighted(src1, alpha, src2, beta, gamma),其中gamma为亮度调节

图像位运算

按位与

​ dst = cv2.bitwise_and( src1, src2[, mask]] )

· 其中mask表示可选操作掩码,即指定要更改的输出数组的元素,也即输出图像像素只有mask对应位置元素不为0的部分才输出,否则 该位置像素的所有通道分量都设置为0

按位或

​ dst = cv2.bitwise_or( src1, src2[, mask]] )

按位非

​ dst = cv2.bitwise_not( src[, mask]] )

按位异或(与二进制加法类似)

​ dst = cv2.bitwise_xor( src1, src2[, mask]] )

位平面分解

提取某个位平面:
import cv2
import numpy as np

i = 5   #提取第五位平面
rose = cv2.imread("Rose.jpg",0)
x = np.ones(rose.shape, dtype=np.uint8)*(2**i)
result = cv2.bitwise_and(rose, x)
cv2.imshow("img",result)
cv2.waitKey(0)
提取位平面并进行阈值处理:
import cv2
import numpy as np

img = cv2.imread("1.jpg", 0)
cv2.imshow("rose",img)
r, c = img.shape
x = np.zeros((r, c, 8), dtype=np.uint8) #提取矩阵
for i in range(8):
    x[:, :, i] = 2 ** i
r = np.zeros((r, c, 8), dtype=np.uint8) #存放8个位平面
for i in range(8):
    r[:, :, i] = cv2.bitwise_and(img, x[:, :, i]) #提取位平面
    img2 = cv2.bitwise_xor(r[:,:,6],r[:,:,7])
    mask = r[:, :, i] > 0 #阈值处理
    r[mask] = 255
mask = img2[:,:]>0
img2[mask] = 255
cv2.imshow("img",img2)
cv2.imshow("img0",r[:,:,7])
cv2.waitKey()

色彩空间

色彩空间基础

GRAY色彩空间

GRAY(灰度图像)通常指 8 位灰度图,其具有 256 个灰度级,像素值的范围是[0,255]。 当图像由 RGB 色彩空间转换为 GRAY 色彩空间时,其处理方式如下:

Gray = 0.299 ·

标签:src,img,python,cv2,dst,滤波,笔记,opencv,图像
From: https://www.cnblogs.com/Asaka-QianXiang/p/17216334.html

相关文章

  • NCNN的内存显存分配器ncnn::Allocator & ncnn::VkAllocator翻译及其差异对比的学习笔
    NCNN的内存分配器ncnn::Allocator通用内存分配器 ncnn::PoolAllocator内存池分配器可以设置池大小,减少分配内存和析构内存次数,空间换时间 ncnn::UnlockedPoolAl......
  • Python+ESP32 收录集
    目录Python+ESP32收录集Python+ESP32收录集Python+ESP32快速上手(持续更新中)wifi蓝牙智能控制单片机手把手教你学ESP32--基于MicroPython......
  • HJ走方格的方案数_动态规划 python
      1importsys2m,n=list(map(int,sys.stdin.readline().strip().split()))3#记录横向小格边为1,竖向为-1。n=1*n,m=-1*m4#记录从出发点到每个节点的走法,取......
  • 实验1 Python开发环境使用和编程初体验
    实验一task1-1.python实验源码1#print输出的几种用法23#用法1:用于输出单个字符串或单个变量4print('hey,u')56#用法2:用于输出多个数据项,用逗号分隔......
  • 实验1 Python开发环境使用和编程初体验
    实验任务1#task1_1:print输出的几种用法实验内容#用法1:输出单个字符串或者变量print("hey,u")#用法2:用于输出多个数......
  • 实验1Python初体验
    实验任务1task1_1.py实验源码print('hey,u')print('hey','u')x,y,z=1,2,3print(x,y,z)print('x=%d,y=%d,z=%d'%(x,y,z))print('x={},y={},z={}'.form......
  • opencv基础
    Python和OpenCV的结合是计算机视觉领域中应用最为广泛的一种方式,它们的结合使得开发者可以快速、高效地完成各种视觉任务。本文将介绍Python和OpenCV的基础使用,包括......
  • Java Mybatis 笔记
    MyBatis1、简介1.1什么是MybatisMyBatis是一款优秀的持久层框架;它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获......
  • 实验1 python开发环境使用和编程初体验
    实验任务1: task1_1.py print('hey,u')print('hey','u')x,y,z=1,2,3print(x,y,z)print('x=%d,y=%d,z=%d'%(x,y,z))print('x={},y={},z={}......
  • 教你用Python画个可爱的皮卡丘!(附完整源码)
    版权声明:原创不易,本文禁止抄袭、转载,侵权必究! 一、去吧!皮卡丘!使用turtle(海龟库)制作而成,感觉挺好玩的,哈哈@>_<@,效果如下: 由于源码过长,这里仅展示部分代码:from......