通常我们将读入的彩色图转化成灰度图,需要将灰度图反转得到掩码,如何正确快速的得到某个图像的反转图呢?

首先看一种看似很正确的写法,对其中每个像素进行如下处理:

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

最新文章

  1. Bundle包的制作与使用
  2. org.apache.catalina.webresources.Cache.getResource Unable to add the resource
  3. MapReduce原理与设计思想
  4. Struts2入门-十分简单的登陆
  5. [NOIP2011] 提高组 洛谷P1315 观光公交
  6. shell 脚本文件Windows传到Linux后编码问题
  7. logging
  8. QT程序探测所需DLL,静态连接和打包
  9. 条件与(&amp;&amp;)和逻辑与(&amp;)以及条件或(||)和逻辑或(|)区别
  10. 启动和关闭JBoss As 7.1.1脚本
  11. Hibernate 异常 集锦
  12. 单链表,循环链表,双向链表(C++实现)
  13. Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置
  14. IntelliJ IDEA配置Tomcat和Lombok
  15. C++程序设计方法3:函数重写
  16. Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate
  17. [UE4]蓝图使用GameMode重构
  18. 【转】SWFUpload 官方说明文档(2.5.0版)
  19. springMVC参数绑定与数据回显
  20. c#随便聊聊数据库操作

热门文章

  1. Microsoft EBooks
  2. ListView Item 里多种点击事件的用法
  3. The King’s Ups and Downs
  4. 前端需要了解的http知识
  5. Unity5 AssetBundle资源管理架构设计
  6. [Xcode 实际操作]七、文件与数据-(7 )使用UserDefaults检测App是否首次运行
  7. MySQL最佳客户端工具 -- SQLyog 13.1.1.0 安装与注册
  8. 自动化测试 Cucumber
  9. SQL SERVER CAST 和 CONVERT 函数
  10. 递归遍历树形json