图像的基础操作

一、获取并修改像素值

将图像看成三维的,x,y和图层(BGR),因此若是[x,y]则输出三个图层的数值,若是[x,y,z]则输出一个数值。
第一种方法:

import cv2 as cv
import numpy as np


img = cv.imread("D://opencv_test//test_a.jpg")
print(img)#直接输出图像的每个像素点
print(img[100, 100])#输出点(100,100)坐标的三个像素值
print(img[:, 100, 1])#输出第100行第二个图层(G)的所有像素值
print(img[:, :, 1])#输出整个图像第二个图层(G)的所有像素值
img[100, 100] = [255, 255, 255]#改变点(100, 100)坐标的三个像素值
print(img[100, 100])
cv.imshow("win", img)
cv.waitKey(0)


cv.destroyAllWindows()

第二种方法:(鸡肋,我觉得)
用到的函数:
1.img.item()
2.img.itemset()
用法见下:

import cv2 as cv
import numpy as np


img = cv.imread("D://opencv_test//test_a.jpg")
print(img.item(100, 100, 1))
#括号内输入具体坐标(三维图像),输出那个点的像素值;等同于print(img[100, 100, 1])
img.itemset((100, 100, 1), 1)
#修改像素值,第一个参数是具体坐标(三维图像),第二个参数是要的修改成的像素值 ;等同于img[100, 100, 1]= 1
print(img.item(100, 100, 1))
print(img.itemset((100, 100, 1), 2))#输出结果是None,错误使用,img.itemset()用来修改
cv.imshow("win", img)
cv.waitKey(0)


cv.destroyAllWindows()

二、获取图像属性

用到的函数:
img.shape
img.size
img.dtype
用法见下:

import cv2 as cv
import numpy as np


img = cv.imread("D://opencv_test//test_a.jpg")
print(img.shape)#如果加载的图像是灰度图,则只返回行和列
print(img.size)
print(img.dtype)
cv.waitKey(0)


cv.destroyAllWindows()

三、图像 ROI

机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。

import cv2 as cv
import numpy as np


img = cv.imread("D://opencv_test//test_a.jpg")
a = img[0:100, 0:100]#勾勒出来的部分
img[200:300, 200:300] = a#将勾勒出来的部分放在图像中你想要放的位置
#注意勾勒出来的部分与放的位置大小要一样
cv.imshow("win", img)
cv.waitKey(0)


cv.destroyAllWindows()

四、拆分及合并图像通道

第一种方法:
用到的函数:
cv.split()
cv.merge()
用法见下:

import cv2 as cv
import numpy as np


img = cv.imread("D://opencv_test//test_a.jpg")
b, g, r = cv.split(img)#函数返回三个图层的元组
cv.imshow("_win_0", b)
cv.imshow("_win_1", g)
cv.imshow("_win_2", r)
Merge = cv.merge((b, g, r))#函数将图层合成
cv.imshow("__win_0", Merge)
cv.waitKey(0)


cv.destroyAllWindows()

第二种方法:(用索引)

import cv2 as cv
import numpy as np


img = cv.imread("D://opencv_test//test_a.jpg")
#拆分三个图层,分别显示
cv.imshow("win_0", img[:, :, 0])
cv.imshow("win_1", img[:, :, 1])
cv.imshow("win_2", img[:, :, 2])
cv.imshow("__win_0", img)
cv.waitKey(0)


cv.destroyAllWindows()

五、为图像扩边(填充)

用到的函数:
cv.copyMakeBorder()
一般是六个参数

  1. 加载的图像的名字
  2. 图像上边边界的像素的数量
  3. 图像下边边界的像素的数量
  4. 图像左边边界的像素的数量
  5. 图像右边边界的像素的数量
  6. 边界的类型(各种类型附在后面)
import cv2 as cv
import numpy as np


img = cv.imread("D://opencv_test//test_a.jpg")
img_1 = cv.copyMakeBorder(img, 15, 15, 15, 15, cv.BORDER_CONSTANT, value=(255, 0, 0))
#特殊例子,后面再加个参数value=(255, 0, 0)表示边界的颜色
img_2 = cv.copyMakeBorder(img, 15, 15, 15, 15, cv.BORDER_REFLECT)
cv.imshow("win_1", img_1)
cv.imshow("win_2", img_2)
cv.waitKey(0)


cv.destroyAllWindows()```
第六个参数:边界类型

 1.  cv2.BORDER_CONSTANT  添加有颜色的常数值边界,还需要 下一个参数(value) 
 2. cv2.BORDER_REFLECT      边界元素的镜像。比如: fedcba|abcdefgh|hgfedcb 
 3. cv2.BORDER_REFLECT_101   or   cv2.BORDER_DEFAULT 跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba 
 4.  cv2.BORDER_REPLICATE     重复最后一个元素。例如: aaaaaa| abcdefgh|hhhhhhh
 5.  cv2.BORDER_WRAP         cdefgh| abcdefgh|abcdefg 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值