图像像素点赋值_Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像...

fb828e7aae8fd5b3e26da479fef8c365.png

普通操作

1. 读取像素

读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。

需要注意的是, OpenCV 读取图像是 BGR 存储显示。

灰度图片读取操作:

import cv2 as cv

# 灰度图像读取
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img[20, 30])

# 显示图片
cv.imshow("gray_img", gray_img)

# 等待输入
cv.waitKey()
cv.destroyAllWindows()

cc5f37813cbeeb16eaaab26a4d881196.png

对于读取灰度图像的像素值,只会返回相应的灰度。

彩色图像读取操作:

import cv2 as cv

# 彩色图像读取
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

print(color_img[20, 30])

blue = color_img[20, 30, 0]
print(blue)

green = color_img[20, 30, 1]
print(green)

red = color_img[20, 30, 2]
print(red)

# 显示图片
cv.imshow("color_img", color_img)

# 等待输入
cv.waitKey()
cv.destroyAllWindows()

# 打印结果
[ 3 2 236]
3
2
236

1f9652436d2e0086819e49ee3b8e6e12.png

需要注意的是在获取彩色图片像素时的第二个参数 1|2|3 的含义是获取 BGR 三个通道的像素。

2. 修改像素

修改像素时,直接对像素赋值新像素即可。

如果是灰度图片,直接赋值即可。

如果是彩色图片,则需依次给 BGR 三个通道的像素赋值。

import cv2 as cv

# 灰度图像读取
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img[20, 30])
# 像素赋值
gray_img[20, 30] = 255
print(gray_img[20, 30])

# 打印结果
72
255

# 彩色图像读取
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
print(color_img[20, 30])
# 像素依次赋值
color_img[20, 30, 0] = 255
color_img[20, 30, 1] = 255
color_img[20, 30, 2] = 255
print(color_img[20, 30])

# 打印结果
[ 3 2 236]
[255 255 255]

如果觉得依次对 BGR 三个通道赋值有些麻烦的话,也可以通过数组直接对像素点一次赋值:

# 像素一次赋值
color_img[20, 30] = [0, 0, 0]
print(color_img[20, 30])

# 打印结果
[0 0 0]

下面是对一个区域的像素进行赋值,将这个区域的像素全都赋值成为白色:

import cv2 as cv

color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
color_img[50:100, 50:100] = [255, 255, 255]

cv.imshow("color_img", color_img)
cv.waitKey()
cv.destroyAllWindows()

7c543d6c7fdfd26f9444a26cb6c8e186.png

使用 Numpy 操作

1. 读取像素

使用 Numpy 进行像素读取,调用方式如下:

返回值 = 图像.item(位置参数)

读取灰度图像和彩色图像如下:

import cv2 as cv

# 读取灰度图像
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img.item(20, 30))

# 打印结果
72

# 读取彩色图像
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

blue = color_img.item(20, 30, 0)
print(blue)

green = color_img.item(20, 30, 1)
print(green)

red = color_img.item(20, 30, 2)
print(red)

# 打印结果
3
2
236

2. 修改像素

修改像素需要使用到 Numpy 的 itemset() 方法,调用方式如下:

图像.itemset(位置, 新值)

下面是我将 [20, 30] 这个修改为白色的示例:

import cv2 as cv

# 读取彩色图像
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

print(color_img[20, 30])

color_img.itemset((20, 30, 0), 255)
color_img.itemset((20, 30, 1), 255)
color_img.itemset((20, 30, 2), 255)

print(color_img[20, 30])

# 输出结果
[ 3 2 236]
[255 255 255]

注意:普通操作通常用于选择数组的区域,例如上面的示例中的选择了 [50:100, 50:100] 这么一个正方形。对于单个像素访问, Numpy 数组方法 array.item() 和 array.itemset() 被认为更好。

Matplotlib 显示图像

我们可以通过 OpenCV 读入图像,然后使用 Matplotlib 来进行图像显示。

import cv2 as cv
from matplotlib import pyplot as plt

img=cv.imread('maliao.jpg', cv.IMREAD_COLOR)
plt.imshow(img)
plt.show()

如果我们直接使用 Matplotlib 来显示 OpenCV 读入的图像,会得到下面这个蓝色的马里奥:

84533cf1d63a7945bd485ea903935c33.png

这是因为对于 OpenCV 的像素是 BGR 顺序,然而 Matplotlib 所遵循的是 RGB 顺序。

解决的方案有很多种(循环像素点的不算哈,这个太傻了),如下:

import cv2 as cv
from matplotlib import pyplot as plt

img=cv.imread('maliao.jpg',cv.IMREAD_COLOR)

# method1
b,g,r=cv.split(img)
img2=cv.merge([r,g,b])
plt.imshow(img2)
plt.show()

# method2
img3=img[:,:,::-1]
plt.imshow(img3)
plt.show()

# method3
img4=cv.cvtColor(img, cv.COLOR_BGR2RGB)
plt.imshow(img4)
plt.show()

结果我就不贴了,这三种方法都可以完成 BGR 至 RGB 的转换。

示例代码

如果有需要获取源码的同学可以在公众号回复「OpenCV」进行获取。

参考

https://blog.csdn.net/eastmount/article/details/82120114

http://woshicver.com/

感谢阅读4bf454dfc0dca17ed2b1b270799b0480.png

386916681feee57a6c43ca49142bf76a.gif

7b2196511b821da9631b6e15ebf73b5c.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cocopods

一、什么是CocoaPods 1、为什么需要CocoaPods 在进行iOS开发的时候,总免不了使用第三方的开源库,比如SBJson、AFNetworking、Reachability等等。使用这些库的时候通常需要: 下载开源库的源代码并引入工程向工程中添加开源库使用到的framework…

CSS3学习手记(10) 过渡

CSS3过渡 允许css的属性值在一定的时间内平滑地过渡在鼠标单击、获取焦点、被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值transition transition-property属性检索或设置对象中的参与过渡的属性 语法 transition-property:none|all|property …

POJ 1286 Necklaces of Beads (Burnside定理,有限制型)

题目链接&#xff1a;http://vjudge.net/problem/viewProblem.action?id11117 就是利用每种等价情形算出置换节之后算组合数 #include <stdio.h> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath>using namespace…

全局搜索快捷键_Windows 自带的聚合搜索来了,与 Mac 的 Spotlight 相比体验如何?...

最近 Windows 10 推出了自带的聚合搜索功能 PowerToys Run&#xff0c;取代了之前的 WinR。苹果的 macOS 以人性化著称&#xff0c;有几个功能让 Windows 用户一直很羡慕&#xff0c;比如全局的聚合搜索工具 Spotlight。在任何界面 command空格&#xff0c;输入关键字就能搜索电…

transform你不知道的那些事

transform是诸多css3新特性中最打动我的&#xff0c;因为它让方方正正的box module变得真实了。 transform通过一组函数实现了对盒子大小、位置、角度的2D或者3D变换。不过很长时间内&#xff0c;我对以下问题都想不太明白&#xff1a; 1、尺寸缩放scale与zoom变换有何不同&…

【SVM】简单介绍(三)

我们考虑SVM的对偶问题&#xff0c;我们通常是在对偶空间中进行求解的。 1、Lagrange Multipliers 对于一个很一般的问题 Minimize f(x)subject to {a(x)≥0b(x)≤0c(x)0\begin{aligned} \text { Minimize } & f(x) \\ \text { subject to } \quad & \left\{\begin{a…

玩转iOS开发:NSURLSession讲解(三)

文章分享至我的个人技术博客: https://cainluo.github.io/14986211698053.html 前言 虽然前面两讲都是说了NSURLSession的一些理论上的知识, 但我们现在起码对NSURLSession有个大概的了解, 并不会像一开始的那样, 一脸懵逼的看着, 这个请求是什么鬼, 那个方法是什么鬼, Task是什…

轻松搞定面试中的二叉树题目

版权全部&#xff0c;转载请注明出处&#xff0c;谢谢&#xff01;http://blog.csdn.net/walkinginthewind/article/details/7518888 树是一种比較重要的数据结构&#xff0c;尤其是二叉树。二叉树是一种特殊的树&#xff0c;在二叉树中每一个节点最多有两个子节点&#xff0c;…

李倩星r语言实战_《基于R的统计分析与数据挖掘》教学大纲

《基于R的统计分析与数据挖掘》课程教学大纲课程代码&#xff1a;090542009课程英文名称&#xff1a;R Language and Data Mining课程总学时&#xff1a;32讲课&#xff1a;32实验&#xff1a;0上机&#xff1a;0适用专业&#xff1a;应用统计学大纲编写(修订)时间&#xff1a;…

自动化测试小结

最近差不多一年从事自动化的测试工作&#xff0c;从开始对自动化一点都不了解到现在能从实现用例、手动命令行执行用例、自制工具来执行用例&#xff0c;感觉进步还是有的。 自动化测试对于手动测试应该是有不小的优势的&#xff0c;虽然在自动化的用例实现中刚开始的时候会显得…

python地理可视化_【Python教程】地理可视化之二

Basemap是Matplotlib的一个子包&#xff0c;负责地图绘制。昨天的推送对如何绘制风向图进行了描述&#xff0c;本文再次利用该包简单介绍如何绘制海洋及海冰温度彩色图示&#xff0c;该图常见于NOAA官网。具体操作如下&#xff1a;导入命令1)设置工作环境并导入程序包%cd "…

寻找白板上的便签条

问题来源&#xff1a;http://answers.opencv.org/question/162480/contour-detection-for-gray-stickers-on-white-background/ 题目的大概意思就是这样的白板&#xff0c;寻找上面的各种便签条。我找到了橘色的&#xff0c;结果是这样代码是这样Mat src imread("gray-st…

LeetCode Permutations

原题链接在这里&#xff1a;https://leetcode.com/problems/permutations/ 题目&#xff1a; Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2]…

去除内存上的警告,避免程序崩掉

# pragma clang diagnostic push # pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:callFunc withObject:array[1]]; # pragma clang diagnostic pop 使用原理&#xff1a;将出现警告的代码加入内存栈中转载于:https://www.c…

opengl2 vtk 编译_编译和使用VTK时值得注意的点(待续)

最近的一个项目中需要使用VTK&#xff0c;于是开始了VTK的漫漫编译之路。长篇大论的编译步骤网上数不胜数&#xff0c;在这里不再细说&#xff0c;可自行google。这里主要说一些在编译过程中需要注意的地方&#xff0c;以免走歪路。1、使用cmake进行第一次configure的时候需要选…

gg

转载于:https://www.cnblogs.com/lyzuikeai/p/7091206.html

二:Go编程语言规范-类型

1.类型 布尔值&#xff0c;数值与字符串类型的实例的命名是预声明的。 数组&#xff0c;结构&#xff0c;指针&#xff0c;函数&#xff0c;接口&#xff0c;切片&#xff0c;映射和信道这些复合类型可由类型字面构造。 每个类型 T 都有一个 基本类型&#xff1a;若 T 为预声明…

HDU 1728 逃离迷宫

这道题做的我想哭啊。。WA了将近十次了吧 一开始我用数组模拟的队列&#xff0c;后来和老大代码对拍&#xff0c;感觉改的是基本都一模一样了&#xff0c;还是WA 实在没有办法了&#xff0c;改用queue了 题目里的x是列y是行&#xff0c;和代码里的反过来的&#xff0c;要注意&a…

Nginx(六)-- 配置文件之Gzip

1.概念及作用 Gizp主要对内容、静态文件做压缩&#xff0c;用来提升网站访问速度&#xff0c;节省带宽。 2.使用方法 gzip既可以配置在server中&#xff0c;也可以配置在server外&#xff0c;此处配置在server中&#xff0c;如下&#xff1a; 说明&#xff1a;  gizp on|off 是…

误码率越高越好还是越低越好_夜间护理步骤越多越好还是越少越好?NFF

现在很多人都知道了夜晚是护肤的黄金护肤时间&#xff0c;有些很聪明的姐妹就从夜晚着手&#xff0c;使用很多种护肤品&#xff0c;希望达到事半功倍的效果&#xff0c;但好皮肤不常有&#xff0c;皮肤问题却常有&#xff01;既然如此&#xff0c;不少人就问了&#xff0c;夜间…