博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV-数字图像处理基础
阅读量:2051 次
发布时间:2019-04-28

本文共 2925 字,大约阅读时间需要 9 分钟。

数字图像处理基础

客观世界物体反射或透射光的分布,是客观世界的反映人类视觉系统对图的响应,是人的大脑的印象或认识,是人的感觉的一种

数字图像由二维的元素组成,每个元素包含一个坐标以及响应值
数字图像处理是针对特定任务,提升图像的可理解性
起源:研究员 Gary Bradski在为英特尔时注意到MIT 的媒体实验室,拥有非常完备的内部公开的计算机视觉开发接口——代码从一个学生传到另一个学生手中,并且会给每个新来的学生一个有价值的由他们自己开发的视觉应用方案。
目标:为高级的视觉研究提供开源并且优化过的基础代码,不再需要重复造轮子。以提供开发者可以在此基础上进行开发的通用接口为手段传播视觉相关知识,这样代码有更强的可读性和移植性。以创造可移植的、优化过的免费开源代码来推动基于高级视觉的商业应用,这些代码可以自由使用,不要求商业应用程序开放或免费!

图像读取、显示、保存

import cv2img=cv2.imread('dog.jpg')imgcv2.imshow('Dog',img) cv2.waitKey() cv2.destroyAllWindows()
img1=cv2.imread('dog.jpg',cv2.IMREAD_GRAYSCALE)img2=cv2.imread('dog.jpg',cv2.IMREAD_COLOR)cv2.imshow('Dog2',img1) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.imwrite('littledoge.jpg',img)

图像像素处理

访问图像,修改像素

img=cv2.imread("dog.jpg")cv2.imshow("before",img)print("访问img[0,0]=",img[0,0])print("访问img[0,0,0]=",img[0,0,0])print("访问img[0,0,1]=",img[0,0,1])print("访问img[0,0,2]=",img[0,0,2])print("访问img[50,0]=",img[50,0])print("访问img[100,0]=",img[100,0])
#区域1for i in range(0,50):    for j in range(0,100):        for k in range(0,3):            img[i,j,k]=255       #白色#区域2for i in range(50,100):    for j in range(0,100):        img[i,j]=[128,128,128]  #灰色        #区域3            for i in range(100,150):    for j in range(0,100):        img[i,j]=0          #黑色        cv2.imshow("after",img)print("修改后img[0,0]=",img[0,0])print("修改后img[0,0,0]=",img[0,0,0])print("修改后img[0,0,1]=",img[0,0,1])print("修改后img[0,0,2]=",img[0,0,2])print("修改后img[50,0]=",img[50,0])print("修改后img[100,0]=",img[100,0])cv2.waitKey()cv2.destroyAllWindows()
import numpy as npimgrad=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)cv2.imshow("demo",imgrad)cv2.waitKey()cv2.destroyAllWindows()img2=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)for i in range(0,50):    for j in range(0,100):        for k in range(0,3):            img2[i,j,k]=255  cv2.imshow("before",imgrad)cv2.imshow('after',img2)cv2.waitKey()cv2.destroyAllWindows()

在这里插入图片描述

import numpy as npimg=np.random.randint(10,99,size=[5,5],dtype=np.uint8)print("img=\n",img)print("读取像素点img[3,2]=",img.item(3,2))img.itemset((3,2),255)print("修改后img=\n",img)print("修改后像素点img[3,2]=",img.item(3,2))

在这里插入图片描述

通道操作

通道拆分-通过索引拆分

import cv2dog=cv2.imread('dog.jpg')cv2.imshow('dog',dog)b=dog[:,:,0]g=dog[:,:,1]r=dog[:,:,2]cv2.imshow("b",b)cv2.imshow("g",g)cv2.imshow("r",r)cv2.waitKey()cv2.destroyAllWindows()

通道拆分-通过函数拆分

dog=cv2.imread('dog.jpg')b,g,r=cv2.split(dog)cv2.imshow("B",b)cv2.imshow("G",g)cv2.imshow("R",r)cv2.waitKey()cv2.destroyAllWindows()bgr=cv2.merge([b,g,r])rgb=cv2.merge([r,g,b])cv2.imshow("dog",dog)cv2.imshow("bgr",bgr)cv2.imshow("rgb",rgb)cv2.waitKey()cv2.destroyAllWindows()

将shape.jpg中的蓝色三角形改变成黑色

import cv2img=cv2.imread('shape.jpg')cv2.imshow('src',img)height,width,_=img.shapeb,g,r=cv2.split(img)for i in range(height):    for j in range(1,width):        for k in range(2):            if 100
<200: img.itemset((i,j,k),0)cv2.imshow('dst',img)cv2.waitKey()cv2.destroyAllWindows()

在这里插入图片描述

转载地址:http://wlklf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-42》78.子集
查看>>
Leetcode C++《热题 Hot 100-43》94.二叉树的中序遍历
查看>>
Leetcode C++ 《第175场周赛-1 》5332.检查整数及其两倍数是否存在
查看>>
Leetcode C++ 《第175场周赛-2 》5333.制造字母异位词的最小步骤数
查看>>
Leetcode C++ 《第175场周赛-3》1348. 推文计数
查看>>
Leetcode C++《热题 Hot 100-44》102.二叉树的层次遍历
查看>>
Leetcode C++《热题 Hot 100-45》338.比特位计数
查看>>
读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
查看>>
Leetcode C++《热题 Hot 100-46》739.每日温度
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
[Kick Start 2020] Round A 2.Plates
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>