图像的基础操作

来源:互联网 发布:数据分析合同 编辑:程序博客网 时间:2024/06/12 00:37

一. 获取并修改像素值

import cv2import numpy as npimg = cv2.imread("E://dog.jpg")#根据像素的行和列的坐标获取他的像素值。对 BGR 图像而言,返回值为 B, G, R 的值。对灰度图像而言,会返回他的灰度值print(img[100,100])      #[ 60 114 125]print(img.item(100,100,2))   #125img.itemset((100,100,2),25)print(img.item(100,100,2))   #25

二. 获取图像属性

1.. img.shape 可以获取图像的形状。他的返回值是一个包含行数,列数,通道数的元组。

img = cv2.imread("E://dog.jpg")print(img.shape)     #(640, 640, 3)

如果图像是灰度图,返回值仅有行数和列数。所以通过检查这个返回值就可以知道加载的是灰度图还是彩色图。
2.. img.size 可以返回图像的像素数目。

print(img.size)    #1228800

3.. img.dtype 返回的是图像的数据类型。

print(img.dtype)   #uint8

三. 图像ROI

ROI(Region of Interest)是指图像中的一个矩形区域,可能你后续的程序需要单独处理这一个小区域。如果你对图像设置了ROI,那么,opencv的大多数函数只在该ROI区域内运算(只处理该ROI区域),如果没设ROI的话,就会出来整幅图像。

import cv2import numpy as npimg = cv2.imread("E://dog.jpg")ballImg = img[380:520,230:350]   #利用numpy中的数组切片设置ROI区域img[0:140,0:120] = ballImg       #将设置的ROI区域添加到原图像的左上方cv2.namedWindow("Image")cv2.imshow("Image", img)cv2.waitKey(0)

这里写图片描述

四. 拆分及合并图像通道

有时我们需要对 BGR 三个通道分别进行操作。这是你就需要把 BGR 拆分成单个通道。
1..第一种方法:使用OpenCV自带的split 函数

import cv2import numpy as npimg = cv2.imread("E://dog.jpg")b,g,r = cv2.split(img)cv2.imshow("blue", b)cv2.imshow("green", g)cv2.imshow("red", r)cv2.waitKey(0)

这里写图片描述

2..第二种方法:使用Numpy数组来分离通道

import cv2import numpy as npimg = cv2.imread("E://dog.jpg")# 创建3个跟图像一样大小的矩阵,数值全部为0b = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)g = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)r = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)#复制图像通道里的数据 b[:,:] = img[:,:,0]g[:,:] = img[:,:,1]r[:,:] = img[:,:,2]

cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用Numpy 索引就尽量用。

有时你需要把独立通道的图片合并成一个 BGR 图像。

img = cv2.merge([r,g,b])  #将BGR图像以RGB的顺序显示

这里写图片描述

五. 绘图函数

1) 画线
cv2.line(img,pt1,pt2,color,thickness)
img:你想要绘制图形的那幅图像。
pt1,pt2:线段的起点和终点
color:线条的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)代表蓝色。对于灰度图只需要传入灰度值。
thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形就会被填充。默认值是 1.
2) 画矩形
cv2.rectangle(img,pt1,pt2,color,thickness)
pt1,pt2分别表示矩形的左上端点和右下端点
3) 画圆
cv2.circle(img,center,radius,color)
4) 添加文字
cv2.putText(img,str,ptr,fontFace,fontScale,color)
fontFace,fontScale分别为字体的类型和大小,类型可查阅字体集

import cv2import numpy as npimg = np.zeros((512,512,3), np.uint8)cv2.line(img,(0,0),(512,300),(255,0,0),5)  #直线cv2.line(img,(512,0),(0,300),(255,0,0),5)  #直线cv2.rectangle(img,(0,0),(512,300),(0,0,255),5)  #矩形cv2.circle(img,(256,150),80,(0,255,0))  #圆font = cv2.FONT_HERSHEY_COMPLEXcv2.putText(img,'Opencv',(10,400),font,4,(50,50,50)) #文字cv2.imshow('img',img)    cv2.waitKey(0)

这里写图片描述

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 内六角螺丝滑失了怎么办 内六角螺钉滑了怎么办 三视图看不出来怎么办 小猫断奶以后母猫涨奶怎么办 手机螺丝滑丝了怎么办 螺丝孔道滑丝了怎么办 螺丝生锈了拧不下来怎么办 钣金加工六角网孔变形怎么办 外六角螺帽滑丝怎么办 内六角螺丝螺帽滑丝怎么办 一字螺丝钉脱扣拧不下来怎么办 一字螺丝拧花了怎么办 小螺丝卸不下来怎么办 机油螺丝滑丝了怎么办 刚滑双板膝盖滑的疼怎么办 lv包真皮弄脏了怎么办 lv包压变形了怎么办 lv的包包被压了怎么办 固态硬盘太小了怎么办 联想笔记本网络连接不可用怎么办 联想g50玩dnf卡怎么办 手机有wifi电脑没有网怎么办 电脑网卡被禁用了怎么办 win8系统装win7蓝屏怎么办 联想笔记本装win7蓝屏怎么办 联想g40-70开机黑屏怎么办 新主机开不了机怎么办 联想720s笔记本闪屏怎么办 华硕k40ie显卡坏了怎么办 开机黑屏进入bois后怎么办 2根内存条不兼容怎么办 联想笔记本r720系统崩溃怎么办 联想天逸310卡怎么办 新买的鼠标没反应怎么办 联想笔记本触屏鼠标失灵怎么办 无线鼠标接收器丢了怎么办 联想笔记本系统重装失败怎么办 联想笔记本屏幕闪屏怎么办 种植牙螺钉掉了怎么办 水管牙断里面了怎么办 水龙头起泡器不起泡怎么办