opencv的图像基本操作

1.获取像素、改变像素

  • index获取
    • img[100:102,100,102]
def get_pixel(self):
    # 根据行列坐标获取像素值,可以直接修改该值
    px1 = self.img[100, 100, 0]
    px2 = self.img[100, 100]  # 返回bgr值。如果是灰度图像返回灰度值。
    px3 = self.img[100:103, 100:103]  # 9个点
    self.img[100, 100] = [255, 255, 255]  # 修改像素值
    print(px1)  # 229
    print(px2)  # [229 224 225]
    print(px3)
    print(self.img[100, 100])
  • numpy的item方式获取
    • img.item()
    • img.itemset()

这里为什么要说是numpy方式呢?因为在OpenCV的Python库中,图像是用numpy库的array结构表示的,你可以理解为矩阵。img这个numpy.array的第一个维度沿着行方向,第二个维度沿着列方向,第三个维度沿着通道。

print(type(self.img)) 

输出结果为:

<class ‘numpy.ndarray’>

def get_pixel_by_numpy(self):
    print(self.img.item(10, 10, 2))  # item()获取一个像素值
    self.img.itemset((10, 10, 2), 100)  # itemset()修改像素值
    print(self.img.item(10, 10, 2))

2.获取图像属性

  • shape
  • size
  • dtype
def get_img_properties(self):
    print(self.img.shape)  # (640, 640, 3)
    print(self.img.size)  # 1228800
    print(self.img.dtype)  # uint8

3.复制图片到图片的某区域

  • img[100:102,100,102]
def copy_roi(self):
     cv2.imshow('image', self.img)
     copy = self.img
     x = copy[280:340, 330:390]
     copy[273:333, 100:160] = x
     cv2.imshow('copy', copy)
     cv2.waitKey(0)
     cv2.destroyAllWindows()

4.分割、合并图像通道

  • cv2.split()
  • cv2.merge()
def split_merge_channel(self):
    b, g, r = cv2.split(self.img)  # 比较耗时,尽量用索引
    img_s = cv2.merge((b, g, r))  # 参数是一个vector

    b = self.img[:, :, 0]  # 拿到第一个通道的
    copy = self.img
    copy[:, :, 2] = 0  # 红色通道置为0
    cv2.imshow('image', copy)
    cv2.waitKey(0)

5.扩展图像、添加边框

  • cv2.copyMakeBorder()
def make_border(self):
    # 四个值的顺序是:上下左右
    top = bottom = left = right = 100
    replicate = cv2.copyMakeBorder(self.img, top, bottom, left, right, cv2.BORDER_REPLICATE)
    reflect = cv2.copyMakeBorder(self.img, top, bottom, left, right, cv2.BORDER_REFLECT)
    reflect101 = cv2.copyMakeBorder(self.img, top, bottom, left, right, cv2.BORDER_REFLECT_101)
    wrap = cv2.copyMakeBorder(self.img, top, bottom, left, right, cv2.BORDER_WRAP)
    constant = cv2.copyMakeBorder(self.img, top, bottom, left, right, cv2.BORDER_CONSTANT)

    plt.subplot(231), plt.imshow(self.img, 'gray'), plt.title('original'),plt.xticks([]), plt.yticks([])
    plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('replicate'),plt.xticks([]), plt.yticks([])
    plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('reflect'),plt.xticks([]), plt.yticks([])
    plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('reflect101'),plt.xticks([]), plt.yticks([])
    plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('wrap'),plt.xticks([]), plt.yticks([])
    plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('constant'),plt.xticks([]), plt.yticks([])

    plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源的计算机视觉库,提供了许多基本的图像处理和计算机视觉功能。以下是一些OpenCV基本操作: 1. 获取并修改图像中的像素点可以通过行和列的坐标值来获取该像素点的像素值。对于BGR图像,返回一个蓝、绿,红的数组,对于灰度图像,仅返回相应的强度值。 2. 获取图像的属性有三个常用的属性: - 形状:img.shape - 图像大小:img.size - 数据类型:img.dtype 3. 图像通道的拆分与合并: - 拆分:使用cv.split()函数,可以将图像的通道拆分为单独的通道。例如,b,g,r = cv.split(img)将图像的蓝色通道、绿色通道和红色通道分别拆分为b,g,r三个变量 - 合并:使用cv.merge()函数,可以将单独的通道合并为一个图像。例如,img = cv.merge((b,g,r))将三个通道的变量b,g,r合并为一个图像 4. 色彩空间的改变: - 使用cv.cvtColor()函数可以将图像的色彩空间进行转换。例如,将BGR图像转换为灰度图像可以使用cv.cvtColor(input_image, cv.COLOR_BGR2GRAY) 5. 图像的加法: - OpenCV的加法是饱和操作,可以使用cv.add()函数进行图像的加法运算。注意,图像的大小应该保持一致 6. 图像的混合: - 使用cv.addWeighted()函数可以将两幅图像按照不同的比例进行混合。注意,图片的权重之和应为1 7. 图像显示: - 可以使用cv.imshow()函数来显示图像。例如,定义一个图像显示函数cv_show(name, img),然后使用cv_show(name, img)来显示图像 8. 图像的边缘复制: - 使用cv.copyMakeBorder()函数可以对图像进行边缘复制。例如,使用复制法复制最边缘像素可以使用cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE) 这些是OpenCV的一些基本操作,它们可用于图像的处理和计算机视觉任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [OpenCV基本操作](https://blog.csdn.net/qq_42627691/article/details/120283042)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Opencv的基础操作](https://blog.csdn.net/m0_51864191/article/details/128243407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值