图像上对的算术运算

1、图像加法

可以用函数cv2.add()将两幅图像进行加法运算,当然也可以直接使用numpy。

res=img1+img2。两幅图像的大小,类型必须一致,或者第二个,图像可以使一个简单的标量值。

注意:OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法

是一种饱和操作,而 Numpy 的加法是一种模操作。

x = np.uint8([250])
y = np.uint8([10])
print cv2.add(x,y) # 250+10 = 260 => 255
[[255]]
print x+y # 250+10 = 260 % 256 = 4
[4]

opencv的效果会好一些

2、图像混合

其实也是加法,但是这个要设置权重,两个图片的权重加起来必须为1。

用函数cv2.addWeighted()

import cv2
import numpy as np
img1=cv2.imread(‘ml.png‘)
img2=cv2.imread(‘opencv_logo.jpg‘)
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow(‘dst‘,dst)
cv2.waitKey(0)
cv2.destroyAllWindow()

3、按位运算

这里包括的按位操作有:AND,OR,NOT,XOR 等。当我们提取图像的

一部分,选择非矩形 ROI 时这些操作会很有用(下一章你就会明白)。下面的

例子就是教给我们如何改变一幅图的特定区域。

我想把 OpenCV 的标志放到另一幅图像上。如果我使用加法,颜色会改

变,如果使用混合,会得到透明效果,但是我不想要透明。如果他是矩形我可

以象上一章那样使用 ROI。但是他不是矩形。但是我们可以通过下面的按位运

算实现

import cv2
import numpy as np
# 加载图像
img1 = cv2.imread(‘roi.jpg‘)
img2 = cv2.imread(‘opencv_logo.png‘)
# I want to put logo on top-left corner, So I create a ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# Now create a mask of logo and create its inverse mask also
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 175, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# Now black-out the area of logo in ROI
# 取 roi 中与 mask 中不为零的值对应的像素的值,其他值为 0 # 注意这里必须有 mask=mask 或者 mask=mask_inv, 其中的 mask= 不能忽略
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)
# 取 roi 中与 mask_inv 中不为零的值对应的像素的值,其他值为 0。
# Take only region of logo from logo image.
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
# Put logo in ROI and modify the main image
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv2.imshow(‘res‘,img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

原文地址:https://www.cnblogs.com/h694879357/p/12271550.html

时间: 2024-11-22 21:21:58

图像上对的算术运算的相关文章

c# PictureBox 的图像上使用鼠标画矩形框

C# 中在图像上画框,通过鼠标来实现主要有四个消息响应函数MouseDown, MouseMove, MouseUp, Paint重绘函数实现.当鼠标键按下时开始画框,鼠标键抬起时画框结束. Point start; //画框的起始点 Point end,//画框的结束点bool blnDraw;//判断是否绘制Rectangel rect; 鼠标按下响应 private void PictureBox1_MouseDown(object sender, MouseEventArgs e) {

[图像]用Matlab在图像上画矩形框

原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/46819527 在毕业设计的时候写论文画图,要在一个图像上精确的标记出要处理的区域,用Photoshop或是其他绘图软件难免不精确,而且也不符合懒人思维(以后怎么办,要一劳永逸,嘿嘿),所以就自己写软件吧. 编程思想和注意事项 其实程序的思路很简单,就是在局域外面像素的值(颜色)覆盖掉就行了,但是要注意几点内容. 原图像通道问题(边框颜色问

opencv_将图像上的4个点按逆时针排序

1:代码如下: #include "stdafx.h" #include "cxcore.h" #include "cvcam.h" #include "windows.h" #include "cv.h" #include "highgui.h" #include "iostream" using namespace std; CvMat* RankPoint(Cv

PHP 使用GD库生成验证码 在图像上绘制汉字

PHP 并不仅限于创建 HTML 输出, 它也可以创建和处理包括 GIF, PNG, JPEG, WBMP 以及 XPM 在内的多种格式的图像. 更加方便的是,PHP 可以直接将图像数据流输出到浏览器. 要想在 PHP 中使用图像处理功能,你需要连带 GD 库一起来编译 PHP. GD 库和 PHP 可能需要其他的库, 这取决于你要处理的图像格式. 你可以使用 PHP 中的图像函数来获取下列格式图像的大小: JPEG, GIF, PNG, SWF, TIFF 和 JPEG2000.如果联合 ex

OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标

涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回调函数cvSetMouseCallback. 当回调函数被调用时,opencv会传入合适的值,当鼠标有动作时,有所反应,比如画线,描点. void CvMouseCallback(int event,int x,int y,int flags,void * param); event 为鼠标事件类型

【练习4.1】图像转换、Canny检测、图像合并、在图像上输出文字

2014-07-17 第四章 细说HighGUI 练习题第1题 题目大致要求: a:(1)从视频文件读入数据,(2)转换为灰度图,(3)做Canny边缘检测,显示在三个窗口 b:将a的三个视频显示在一个窗口中 c:在b步骤的不同部分写上合适的文字标签 代码: 1 #include "stdafx.h" 2 #include <windows.system.h> 3 #include <iostream> 4 #include <cv.h> 5 #in

C#图像处理(3):在图像上加条形码

引入Aspose.BarCode用来生成条形码,方法如下: 1 /// <summary> 2 /// 生成条码 3 /// </summary> 4 /// <param name="CodeString">生成条码的字符串</param> 5 /// <param name="Path">条码保存的路径</param> 6 /// <returns>条码保存的路径</ret

图像上采样和图像下采样

#1. 图像下采样和上采样的概念#无论是图像的上采样还是下采样都可以使用matlab中的imresize函数来实现,而这些操作在使用到图像金字塔的算法中,必然是不可或缺的操作步骤.需要指出的是,当我们对一幅图像先下采样再上采样回原尺寸,得到的结果就是原图像的低频成分了.下面简要介绍2者的概念. 1.1 图像下采样 图像下采样(subsampled)可以通俗地理解成缩小图像,又称为降采样(downsampled).其目的有两个:1)使得图像符合显示区域的大小:2)生成对应图像的缩略图.##1.2

python_Opencv_图像上的算术运算

图像加法 cv2和numpy中都提供了图像相加的实现,你可以使用函数cv2.add() 将两幅图像进行加法运算,当然也可以直接使用numpy,res=img1+img.两幅图像的大小,类型必须一致,或者第二个图像可以使一个简单的标量值. 但是二者实现有些不同,如下一个例子: 1 # -*- coding: utf-8 -*- 2 3 # 图像加法,比较numpy中和cv2中两种不同加法运算 4 5 import cv2 6 import numpy as np 7 8 x = np.uint8(