当前位置: 首页 > news >正文

Open CV图像基本操作可莉版

Open CV图像基本操作

  • 一、处理单个像素值
    • 访问像素值
    • 修改像素值
  • 二、处理单个ROI区域(自选区域)
    • 提取 ROI
    • 修改 ROI
  • 三、 处理图像通道
    • 通道分离
    • 通道合并
  • 四、处理整体
    • 图像缩放
    • 图像旋转
    • 图像平移
    • 图像翻转


一、处理单个像素值

图像是由像素组成的矩阵,每个像素都有一个或多个值,表示颜色或灰度。在灰度图像中,每个像素只有一个值,表示灰度强度;在彩色图像中,每个像素通常有三个值,分别表示红色、绿色和蓝色(RGB)通道的强度。

访问像素值

假设我们有一个灰度图像 img,可以通过 img[y, x] 来访问位于 (x, y) 位置的像素值。对于彩色图像,可以通过 img[y, x, c] 来访问特定通道 c 的像素值,其中 c 为 0(蓝色)、1(绿色)或 2(红色)。

实例

import cv2# 读取图像
img = cv2.imread('image.jpg')# 访问像素值
pixel_value = img[100, 150]  # 访问 (150, 100) 位置的像素值
print(pixel_value)

修改像素值

实例

# 修改像素值
img[100, 150] = [255, 255, 255]  # 将 (150, 100) 位置的像素值设置为白色

二、处理单个ROI区域(自选区域)

ROI 是指图像中我们感兴趣的区域 (Region of Interest)。通过提取 ROI,我们可以只对图像的特定部分进行处理,从而提高处理效率。

提取 ROI

在 OpenCV 中,可以通过切片操作来提取 ROI。假设我们想要提取图像中左上角 100x100 像素的区域:

实例

# 提取 ROI
roi = img[0:100, 0:100]

修改 ROI

提取 ROI 后,可以对其进行修改,然后将修改后的 ROI 放回原图像中。
实例

# 修改 ROI
roi[:, :] = [0, 255, 0]  # 将 ROI 区域设置为绿色# 将修改后的 ROI 放回原图像
img[0:100, 0:100] = roi

三、 处理图像通道

彩色图像通常由多个通道组成,例如 RGB 图像的三个通道。有时我们需要将这些通道分离出来进行单独处理,然后再将它们合并回原图像。

通道分离

在 OpenCV 中,可以使用 cv2.split() 函数将图像的通道分离。
实例

# 通道分离
import cv2if __name__ == '__main__':imgPath = 'D:\Word\keli.jpg'img = cv2.imread(imgPath)cv2.imshow('image', img)b, g, r = cv2.split(img)# 下面会依次显示r,g,b三张图,每张3秒cv2.imshow('b', b)cv2.waitKey(3000)cv2.imshow('g', g)cv2.waitKey(3000)cv2.imshow('r', r)cv2.waitKey(3000)# 下面会依次保存r,g,b三张图,不像上面顺序是反的cv2.imwrite('D:\Word\keli-r.jpg', r)time.sleep(5)cv2.imwrite('D:\Word\keli-g.jpg', g)time.sleep(5)cv2.imwrite('D:\Word\keli-b.jpg', b)

原图
可莉原图
RGB图
可莉RGB图

通道合并

分离后的通道可以使用 cv2.merge() 函数合并回原图像。

实例

# 通道合并
merged_img = cv2.merge([b, g, r])

四、处理整体

图像的几何变换是图像处理中常见的操作,包括缩放、旋转、平移和翻转。

图像缩放

图像缩放可以通过 cv2.resize() 函数实现。可以指定缩放后的图像尺寸或缩放比例。

实例

# 图像缩放
resized_img = cv2.resize(img, (200, 200))  # 将图像缩放为 200x200 像素

图像旋转

图像旋转可以通过 cv2.getRotationMatrix2D() 和 cv2.warpAffine() 函数实现。需要指定旋转中心和旋转角度。

实例

# 图像旋转# 取高和宽h, w = img.shape[:2]# 计算旋转中心center = (int(w/2), int(h/2))# 得到2维线性变化M = cv2.getRotationMatrix2D(center, 180, 1)# 将变化作用到img上img = cv2.warpAffine(img, M, (w, h))# 显示cv2.imshow('img', img)cv2.waitKey(0)

图像平移

图像平移可以通过 cv2.warpAffine() 函数实现。需要指定平移矩阵。

实例

# 图像平移# 向右平移 100 像素,向下平移 50 像素M2 = np.float32([[1, 0, 100], [0, 1, 50]])img = cv2.warpAffine(img, M2, (w, h))cv2.imshow('img', img)cv2.waitKey(0)

平移以后空的地方显示黑色背景
移动后

图像翻转

图像翻转可以通过 cv2.flip() 函数实现。可以指定翻转方向(水平、垂直或两者)。

实例

# 图像翻转
flipped_img = cv2.flip(img, 1)  # 水平翻转

计划后面都用这一张原创图练习

http://www.lryc.cn/news/602643.html

相关文章:

  • IP协议解析:从寻址到路由
  • Vue3判断对象是否为空方法
  • 判断回文链表【两种O(n)时间复杂度】
  • 10_opencv_分离颜色通道、多通道图像混合
  • Netty中trySuccess和setSuccess的区别
  • Java程序员学从0学AI(七)
  • mybatis-plus-tenant-support
  • Caddy服务器指南
  • 工业计算机的重要性
  • C# 提取字符串 指定开始和结尾字符
  • JAVA+AI教程-第四天
  • 2,智能制造,MOM,MES - 柔性制造(具体内容参考PPT文档)
  • 接口测试核心概念与实践指南
  • 分享一个脚本,从mysql导出数据csv到hdfs临时目录
  • 安装及使用vscode
  • 基于EKF的单站相位差变化率定位实现
  • 【论文阅读】Safety Alignment Should Be Made More Than Just a Few Tokens Deep
  • Solidity基础(教程①-简单数字存储)
  • AI项目实战:使用Python进行专业级数据集处理的完整教程
  • MySQL面试题及详细答案 155道(001-020)
  • 生产力效能跃升 金士顿DDR5 5600内存
  • JavaWeb 新手学习路线:从零到全栈开发,系统掌握企业级 Web 开发技能
  • 经典算法题解析:从思路到实现,掌握核心编程思维
  • 开发笔记 | 实现人物立绘的差分效果
  • 四、计算机组成原理——第5章:存储系统
  • 电子电路原理学习笔记---第4章二极管电路---第3天
  • 架构师增效指南:飞算JavaAI:需求驱动下的智能微服务拆分与治理
  • 浏览器安全演进:从裸指针到 raw_ptr 的实践与思考
  • leetcode 2044. 统计按位或能得到最大值的子集数目 中等
  • RV1126B-P机器视觉应用AIoT及边缘计算算力达2.0支持 HDR 、 3DNR