openCV 核心操作 1 图像的基础操作

基础函数

img[100, 100] = [255, 255, 255]
#img[100,100]是图像坐标,[255,255,255]是像素值
img[100, 100, 0]
#b:0,g:1,r:2
img.item(10, 10, 2)
#获取r(分割r,g,b)
img.itemset((10, 10, 2), 100)
#修改像素值(修改r,b,g)
img.shape
#输出图像  行数、列数、通道数的元组
img.size
#返回图像的像素数目 = 行数*列数*通道数
img.dtype
#返回图像的数据类型 (uint8)

ball = img[280:340, 330:390]
img[273:333, 100:160] = ball
#把图像的特定区域拷贝到图像的其他区域

b,g,r = cv2.split(img)
#b = img[:,:,0]
#拆分
img = cv2.merge(b,g,r)
#合并
img[:,:,2] = 0

cv2.copyMakeBorder()
#ret = cv2.copyMakeBorder(img, row, row, col, col, cv2.BORDER_CONSTANT)
#输入图像,相应方向(上下左右)的边框宽度,填充的值的方式
#cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要额外再给定一个参数)
#cv2.BORDER_REFLECT:添加的边框像素将是边界元素的镜面反射,类似于gfedcb|abcdefgh|gfedcba
#cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT:和上面类似,但是有一些细微的不同,类似于gfedcb|abcdefgh|gfedcba
#cv2.BORDER_REPLICATE:使用最边界的像素值代替
plt.subplot()
#连续绘制多个图
#plt.subplot( numRows, numCols,  plotNum)
# 整个Figure会被划分为numRows行,numCols列,并从左往右,从上往下编号为1,2…。也就是说plotNum指定了子图所在的位置。
# 此外,如果三个参数的都小于10,则可以简写在一起,例如:subplot(4,3,2)也可以写成subplot(432)
# 例如:plt.subplot(222)表示将整个图像窗口分为2行2列, 当前位置为2.
plt.imshow()
#显示图片,同时也显示其格式。
plt.title()
#plt.title(‘Interesting Graph’,fontsize=‘large’,fontweight=‘bold’) 设置字体大小与格式
#plt.title(‘Interesting Graph’,color=‘blue’) 设置字体颜色
#plt.title(‘Interesting Graph’,loc =‘left’) 设置字体位置
#plt.title(‘Interesting Graph’,verticalalignment=‘bottom’) 设置垂直对齐方式
#plt.title(‘Interesting Graph’,rotation=45) 设置字体旋转角度
#plt.title(‘Interesting’,bbox=dict(facecolor=‘g’, edgecolor=‘blue’, alpha=0.65 )) 标题边框

获取并修改像素值

import cv2
import numpy as np
img = cv2.imread ('imag.jpg')
print (img.item(10,10,2))
#第十行,第十列的r值,,,(b,g,r)
img.itemset((10,10,2),100)
#或img[:,:,2] = 100
#用100代替r,成为新的r值
print (img.item(10,10,2))

获取图像属性

import cv2
import numpy as np
img = cv2.imread ('imag.jpg')
print img.shape
#输出图像  行数、列数、通道数的元组
print img.size
#返回图像的像素数目 = 行数*列数*通道数
print img。dtype
#返回图像的数据类型 (uint8)

图像RoI

import cv2
import numpy as np
img = cv2.imread ('imag.jpg')
ball=img[280:340,330:390] 
img[273:333,100:160]=bal
#把图像的特定区域拷贝到图像的其他区域

拆分及合并图像通道

import cv2
import numpy as np
img = cv2.imread ('imag.jpg')
b,g,r=cv2.split(img)
#拆分    或b=img[:,:,0]
img=cv2.merge(b,g,r)
#合并
#或img[:,:,2]=0

为图像扩边(填充)

import cv2
import numpy as np
from matplotlib import pyplot as plt

BLUE=[255,0,0]

img1=cv2.imread('sz.jpg')

replicate = cv2.copyMakeBorder(img1,50,50,50,50,cv2.BORDER_REPLICATE)
#cv2.BORDER_REPLICATE:使用最边界的像素值代替
reflect = cv2.copyMakeBorder(img1,50,50,50,50,cv2.BORDER_REFLECT)
#cv2.BORDER_REFLECT:添加的边框像素将是边界元素的镜面反射,类似于gfedcb|abcdefgh|gfedcba
reflect101 = cv2.copyMakeBorder(img1,50,50,50,50,cv2.BORDER_REFLECT_101)
#cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT:和上面类似,但是有一些细微的不同,类似于gfedcb|abcdefgh|gfedcba
wrap = cv2.copyMakeBorder(img1,50,50,50,50,cv2.BORDER_WRAP)
constant=cv2.copyMakeBorder(img1,50,50,50,50,cv2.BORDER_CONSTANT,value=BLUE)
#cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要额外再给定一个参数)

plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
# 例如:plt.subplot(232)表示将整个图像窗口分为2行3列, 当前位置为2
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
#plt.imshow(replicate,'gray') = cv2.imshow('gray',replicate)
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
#plt.title()   图注
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()

效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@bwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值