Python-OpenCV——Image inverting
2024-09-07 19:33:37
通常我们将读入的彩色图转化成灰度图,需要将灰度图反转得到掩码,如何正确快速的得到某个图像的反转图呢?
首先看一种看似很正确的写法,对其中每个像素进行如下处理:
img[x,y] = abs(img[x,y] - 255)
其实,灰度图中像素值是<class numpy.uint8>, 即8位无符号数,这是为了保证像素值0~255。
所以正确的写法只需 img = 255-img。
def inverte(imagem, name):
imagem = (255-imagem)
cv2.imwrite(name, imagem)
或者使用OpenCV中的库函数
imagem = cv2.bitwise_not(imagem)
还有一种简洁的方法,但是不那么直观。
import cv2
image = cv2.imread("img.png")
image = ~image
cv2.imwrite("img_inv.png",image)
为什么这是正确的呢?前面知数据类型为8位无符号数,已知 $x+(\sim x)+1=0$,所以$255-x=255+(\sim x)+1=(\sim x)+256= \sim x$.
import numpy as np
x1 = np.array([25,255,10], np.uint8) #for example
x2 = ~x1
print(x1)
print (x2)
结果为:
[ 25 255 10]
[230 0 245]
参考链接:stack overflow中inverting image in Python with OpenCV https://stackoverflow.com/questions/19580102/inverting-image-in-python-with-opencv
最新文章
- Bundle包的制作与使用
- org.apache.catalina.webresources.Cache.getResource Unable to add the resource
- MapReduce原理与设计思想
- Struts2入门-十分简单的登陆
- [NOIP2011] 提高组 洛谷P1315 观光公交
- shell 脚本文件Windows传到Linux后编码问题
- logging
- QT程序探测所需DLL,静态连接和打包
- 条件与(&;&;)和逻辑与(&;)以及条件或(||)和逻辑或(|)区别
- 启动和关闭JBoss As 7.1.1脚本
- Hibernate 异常 集锦
- 单链表,循环链表,双向链表(C++实现)
- Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置
- IntelliJ IDEA配置Tomcat和Lombok
- C++程序设计方法3:函数重写
- Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate
- [UE4]蓝图使用GameMode重构
- 【转】SWFUpload 官方说明文档(2.5.0版)
- springMVC参数绑定与数据回显
- c#随便聊聊数据库操作