0x01. 滤镜

喜欢自拍的人肯定都知道滤镜了,下面代码尝试使用一些简单的滤镜,包括图片的平滑处理、灰度化、二值化等:

import cv2.cv as cvimage=cv.LoadImage('img/lena.jpg', cv.CV_LOAD_IMAGE_COLOR) #Load the image
cv.ShowImage("Original", image)grey = cv.CreateImage((image.width ,image.height),8,1) #8depth, 1 channel so grayscale
cv.CvtColor(image, grey, cv.CV_RGBA2GRAY) #Convert to gray so act as a filter
cv.ShowImage('Greyed', grey)# 平滑变换
smoothed = cv.CloneImage(image)
cv.Smooth(image,smoothed,cv.CV_MEDIAN) #Apply a smooth alogrithm with the specified algorithm cv.MEDIAN
cv.ShowImage("Smoothed", smoothed)# 均衡处理
cv.EqualizeHist(grey, grey) #Work only on grayscaled pictures
cv.ShowImage('Equalized', grey)# 二值化处理
threshold1 = cv.CloneImage(grey)
cv.Threshold(threshold1,threshold1, 100, 255, cv.CV_THRESH_BINARY)
cv.ShowImage("Threshold", threshold1)threshold2 = cv.CloneImage(grey)
cv.Threshold(threshold2,threshold2, 100, 255, cv.CV_THRESH_OTSU)
cv.ShowImage("Threshold 2", threshold2)element_shape = cv.CV_SHAPE_RECT
pos=3
element = cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos, element_shape)
cv.Dilate(grey,grey,element,2) #Replace a pixel value with the maximum value of neighboors
#There is others like Erode which replace take the lowest value of the neighborhood
#Note: The Structuring element is optionnal
cv.ShowImage("Dilated", grey)cv.WaitKey(0)

0x02. HighGUI

OpenCV 内建了一套简单的 GUI 工具,方便我们在处理界面上编写一些控件,动态的改变输出:

import cv2.cv as cvim = cv.LoadImage("img/lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
thresholded = cv.CreateImage(cv.GetSize(im), 8, 1)def onChange(val):cv.Threshold(im, thresholded, val, 255, cv.CV_THRESH_BINARY)cv.ShowImage("Image", thresholded)# 创建一个滑动条控件
onChange(100) #Call here otherwise at startup. Show nothing until we move the trackbar
cv.CreateTrackbar("Thresh", "Image", 100, 255, onChange) #Threshold value arbitrarily set to 100cv.WaitKey(0)

0x03. 选区操作

有事希望对图像中某一块区域进行变换等操作,就可以使用如下方式:

import cv2.cv as cvim = cv.LoadImage("img/lena.jpg",3)# 选择一块区域
cv.SetImageROI(im, (50,50,150,150)) #Give the rectangle coordinate of the selected area# 变换操作
cv.Zero(im)
#cv.Set(im, cv.RGB(100, 100, 100)) put the image to a given value# 解除选区
cv.ResetImageROI(im) # Reset the ROIcv.ShowImage("Image",im)cv.WaitKey(0)

0x04. 运算

对于多张图片,我们可以进行一些运算操作(包括算数运算和逻辑运算),下面的代码将演示一些基本的运算操作:

import cv2.cv as cv#or simply import cvim = cv.LoadImage("img/lena.jpg")
im2 = cv.LoadImage("img/fruits-larger.jpg")
cv.ShowImage("Image1", im)
cv.ShowImage("Image2", im2)res = cv.CreateImage(cv.GetSize(im2), 8, 3)# 加
cv.Add(im, im2, res) #Add every pixels together (black is 0 so low change and white overload anyway)
cv.ShowImage("Add", res)# 减
cv.AbsDiff(im, im2, res) # Like minus for each pixel im(i) - im2(i)
cv.ShowImage("AbsDiff", res)# 乘
cv.Mul(im, im2, res) #Multiplie each pixels (almost white)
cv.ShowImage("Mult", res)# 除
cv.Div(im, im2, res) #Values will be low so the image will likely to be almost black
cv.ShowImage("Div", res)# 与
cv.And(im, im2, res) #Bit and for every pixels
cv.ShowImage("And", res)对于多张图片,我们可以进行一些运算操作(包括算数运算和逻辑运算),下面的代码将演示一些基本的运算操作:# 或
cv.Or(im, im2, res) # Bit or for every pixels
cv.ShowImage("Or", res)# 非
cv.Not(im, res) # Bit not of an image
cv.ShowImage("Not", res)# 异或
cv.Xor(im, im2, res) #Bit Xor
cv.ShowImage("Xor", res)# 乘方
cv.Pow(im, res, 2) #Pow the each pixel with the given value
cv.ShowImage("Pow", res)# 最大值
cv.Max(im, im2, res) #Maximum between two pixels
#Same form Min MinS
cv.ShowImage("Max",res)cv.WaitKey(0)

———————————————————————————————————————————分割线———————————————————————————————————————————————————

0x01. 像素


有两种直接操作图片像素点的方法:第一种办法就是将一张图片看成一个多维的list,例如对于一张图片im,想要操作第四行第四列的像素点就直接 im[3,3] 就可以获取到这个点的RGB值。第二种就是使用 OpenCV 提供的 Get1D、 Get2D 等函数。推荐使用第一种办法吧,毕竟简单。

0x02. 获取行和列像素

有一下四个函数:
  • cv.GetCol(im, 0): 返回第一列的像素

  • cv GetCols(im, 0, 10): 返回前 10 列

  • cv.GetRow(im, 0): 返回第一行

  • cv.GetRows(im, 0, 10): 返回前 10 行

0x03. 批量处理

需要批量处理所有的像素点的时候,只需要使用for循环迭代处理就可以了:
import cv2.cv as cvim = cv.LoadImage("img/lena.jpg")for i in range(im.height):for j in range(im.width):im[i,j] # 这里可以处理每个像素点
还有一种迭代处理的方式是使用 LineIterator,不过在声明 LineIterator 的时候需要制定处理像素点的开始点和结束点。
import cv2.cv as cvim = cv.LoadImage("img/lena.jpg")li = cv.InitLineIterator(im, (0, 0), (im.rows, im.cols)) #So loop the entire matrixfor (r, g, b) in li:# 这里可以对每个像素点的 r g b 进行处理
娱乐一下, 随机获取 5000 个像素点,然后把颜色换成一个随机的值(salt):
import cv2.cv as cvimport random# 这里也可以使用 Get2D/Set2D 来加载图片
im = cv.LoadImage("img/lena.jpg") for k in range(5000): #Create 5000 noisy pixelsi = random.randint(0,im.height-1)j = random.randint(0,im.width-1)color = (random.randrange(256),random.randrange(256),random.randrange(256))im[i,j] = colorcv.ShowImage("Noize", im)
cv.WaitKey(0)
效果图:

from: https://segmentfault.com/a/1190000003742433https://segmentfault.com/a/1190000003742442

Python-OpenCV 处理图像(二)(三):滤镜和图像运算 图像像素点操作相关推荐

  1. python+OpenCV笔记(二十四):Shi-Tomasi角点检测

    Shi-Tomasi角点检测 原理 python+OpenCV笔记(二十二):角点检测原理(Harris角点检测原理.Shi-Tomasi角点检测原理)https://blog.csdn.net/qq ...

  2. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示

    Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示 第一章:霍夫变换检测圆 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + openc ...

  3. python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离

    图像像素的访问.通道的合并与分离 (一)像素访问 在第一篇博客中,向大家介绍了,所谓的图像在计算机看来就是一个矩阵,对于RGB图像矩阵一共有三层,分别代表着RGB通道,矩阵中每一个数的大小代表着不同通 ...

  4. [转载] 使用Python+OpenCV实现在视频中某对象后添加图像

    参考链接: Python Opencv 基础3 : resize 调整图像大小 概述 在运动物体后面添加图像是一个典型的计算机视觉项目了解如何使用传统的计算机视觉技术在视频中添加logo 介绍 我的一 ...

  5. python opencv 条形码及二维码检测识别

    目录 条形码检测识别 二维码检测识别 基于python opencv pyzbar 实现. 条形码检测识别 原图: 最后截取图: 直接上代码: import cv2 import numpy as n ...

  6. python+openCV 获取背景(三)

    本文小目标:获取摄像头视频中的背景 在监控视频中获取背景图片方法: def cal_background(image, mog=None):if mog is None:mog = cv2.creat ...

  7. python+OpenCV笔记(二十):滤波函数——filter2D

    filter2D用于将自定义的滤波器应用于图像,需要为这个函数提供的一个重要参数就是核矩阵. 该函数非常强大,可以生成很多种不同的结果,包括与之前的模糊函数相同的结果,不同的核还可以形成很多不同的滤波 ...

  8. 使用Python+OpenCV实现在视频中某对象后添加图像

    概述 在运动物体后面添加图像是一个典型的计算机视觉项目 了解如何使用传统的计算机视觉技术在视频中添加logo 介绍 我的一位同事向我提出了一个挑战--建立一个计算机视觉模型,可以在视频中插入任何图像, ...

  9. Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色(末尾有一个小训练——是将所学得的图像颜色修改应用为画板一般的刷新)

    文章目录 愿所有正在努力的人都可以坚持自己的路一直走下去! 实现轨迹(跟踪)栏功能的函数 函数主要参数讲解 代码实现 我们先创建一个窗体,为轨迹(跟踪)栏的挂载做准备 接着我们把需要的轨迹(跟踪)栏添 ...

  10. Python+OpenCV图像处理(二)——打印图片属性、设置图片存储路径、电脑摄像头的调取和显示...

    一. 打印图片属性.设置图片存储路径 代码如下: #打印图片的属性.保存图片位置 import cv2 as cv import numpy as np #numpy是一个开源的Python科学计算库 ...

最新文章

  1. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...
  2. CCF-百度松果基金正式“亮出”申报细则,加码产学研前沿合作
  3. 关于Retinex图像增强算法的一些新学习。
  4. standalone应用_具有Spring Boot的Spring Integration Standalone应用程序
  5. oc开源应用_失眠:一款开源应用,可根据睡眠周期告诉您何时入睡
  6. mysql多地备份_mysql简单批量备份多个库
  7. 这个是我的第一篇日志
  8. [李景山php]每天TP5-20161205|Loader.php-3
  9. 设为首页代码和加入收藏代码(兼容各种浏览器)
  10. 使用python爬取链家上海二手房信息的案例
  11. Win11 22H2怎么跳过联网和微软账户登录?
  12. Python骚操作,生成WiFi二维码,扫描一键联网
  13. 吴冠中的一类国画:盛世的迷思
  14. android图片处理,让图片变成圆形
  15. 高通项目端口每次跳出要求安装驱动解决方法
  16. 国外有什么好的网站推荐?
  17. 无线接入认证服务器,搭建基于AD和IAS的802.1X无线认证系统
  18. python根据IP判断地理位置
  19. Python网络爬虫requests、bs4爬取空姐图片,福利哦
  20. 林轩田机器学习基石-Notes

热门文章

  1. 【沟通交流】弱关系向强关系的转变
  2. 安徽一个班37人考进清华北大,老师发来一则短信,家长沉默了
  3. error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format
  4. Android华容道之一步一步实现-8-开始游戏
  5. Algorithms_二叉树的前序遍历、中序遍历、后续遍历(深度优先)
  6. 高并发编程-捕获线程运行时的异常 + 获取调用链
  7. 实战SSM_O2O商铺_43【前端展示】店铺详情页面从后端到前端的实现
  8. Spring-Spring 开发环境搭建及HelloSpring
  9. 《数据结构》知识点Day_04
  10. 电脑快捷键横屏变竖屏,电脑显示器竖屏横屏来回切换怎么设置