计算机视觉 OpenCV (6) 像素解决

作者 : 开心源码 本文共1935个字,预计阅读时间需要5分钟 发布时间: 2022-05-13 共226人阅读

我们读取图片每一个像素值,我们需要一个好用又快速的 python 库来实现操作数组库 numpy。通常会使用 numpy 来遍历图形的每一个像素点。通过修改像素点来改变图像。
也会详情少量我们在 opencv 来用到有关 opencv 的 numpy 常用操作。

def access_pixels(image):    print(image.shape)    height = image.shape[0]    width = image.shape[1]    channels = image.shape[2]    print("width: %s, height: %s, channels:%s"%(width,height,channels))
access_pixels(img)

从输出上来看是一个 3 维矩阵,一维 512 为图像宽度而第二个维度 512 为图像高度,最后每个为 3 维像素值,代表图形的 BRG,注意 opencv 读取图片是 BRG 而不是 RGB 格式我们需要进行转换。

(512, 512, 3)width: 512, height: 512, channels:3

在 ps 有反色解决,今天我们通过遍历每一个像素而后 255 减去每一个像素值来对图片进行取反。达到反色的效果。

def access_pixels(image):    # print(image.shape)    height = image.shape[0]    width = image.shape[1]    channels = image.shape[2]    # print("width: %s, height: %s, channels:%s"%(width,height,channels))    for row in range(height):        for col in range(width):            for c in range(channels):                pv = image[row,col,c]                image[row,col,c] = 255 -pv    cv2.imshow('processed',image)

图片

def create_image():    img = np.zeros([400,400,3],np.uint8)    cv2.imshow('img',img)
img[:,:,1] = np.ones([400,400])* 255

出现一张绿色图片,宽度和高度分别为 400

import cv2import numpy as np# events = [i for i in dir(cv2) if 'EVENT' in i]# print(events)def click_event(event, x, y, flags, param):    if event == cv2.EVENT_LBUTTONDOWN:        cv2.circle(img,(x,y), 3, (0,255,0),-1)        points.append((x,y))        if len(points) >= 2:            cv2.line(img,points[-1],points[-2], (255,0,0),5)        cv2.imshow('image',img)# img = np.zeros((512,512,3),np.uint8)img = cv2.imread('lena.jpg')cv2.imshow('image',img)points = []cv2.setMouseCallback('image',click_event)cv2.waitKey(0)cv2.destroyAllWindows()

结合之间学习的鼠标左键事件,以及今天学习通过 numpy 来获取像从来实现在图片进行绘制线条的效果。

import cv2import numpy as np# events = [i for i in dir(cv2) if 'EVENT' in i]# print(events)def click_event(event, x, y, flags, param):    if event == cv2.EVENT_LBUTTONDOWN:                blue = img[x,y,0]        green = img[x,y,1]        red = img[x,y,2]        cv2.circle(img,(x,y),3,(0,0,255),-1)        mColorImage = np.zeros((512,512,3),np.uint8)        mColorImage[:] = [blue,green,red]        cv2.imshow('color',mColorImage)# img = np.zeros((512,512,3),np.uint8)img = cv2.imread('lena.jpg')cv2.imshow('image',img)points = []cv2.setMouseCallback('image',click_event)cv2.waitKey(0)cv2.destroyAllWindows()

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 计算机视觉 OpenCV (6) 像素解决

发表回复