python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

图像边框的实现

图像边框设计的主要函数

cv.copyMakeBorder()——实现边框填充

主要参数如下:

参数一:源图像——如:读取的img

参数二——参数五分别是:上下左右边的宽度——单位:像素

参数六:边框类型:

cv.BORDER_CONSTANT——cv.BORDER_REPLICATE——cv.BORDER_REFLECT——cv.BORDER_WRAP——cv.BORDER_REFLECT_101——cv.BORDER_TRANSPARENT——cv.BORDER_REFLECT101——cv.BORDER_DEFAULT——cv.BORDER_ISOLATED

参数七——只在边框类型选择borderType == BORDER_CONSTANT,才设置,意为边框值

边框类型的说明:

BORDER_CONSTANT:意为添加指定颜色的边框——由value值确定:为list

其它参数:(可根据需要调制,不过一般前两个用的多一些)

代码实例

import cv2 as cv

import numpy as np

if __name__ == "__main__":

img = cv.imread('./imag_in_save/open_class.png')

cv.namedWindow('imag', cv.WINDOW_NORMAL)

cv.resizeWindow('imag', 500, 500)

img = cv.copyMakeBorder(img, 20, 20, 20, 20, cv.BORDER_CONSTANT, value=[2, 83, 13]) # 添加边框

cv.imshow('imag', img)

cv.waitKey(0)

cv.destroyAllWindows()

效果

图像混合的实现

图像混合实现的主要函数

cv.addWeighted()——实现图像的混合

它的工作原理采用的是一个简单权重公式:g(x)=(1−α)f0(x)+αf1(x)

第一个参数为一张图象,紧跟着第二个参数为第一张图片的权重(0~1)也就是公式里的(1 - α)

第三个参数为另一张需要混合的图片,同样的,第四个参数为这张图片的权重,也就是公式里的(α)

至于第五个参数:每个对应标量的和值——可以设置混合的高光

其它两个参数:(最后的一个参数单独用的不是很多,在一些其他处理中用的比较多)

dst 输出数组,其大小和通道数与输入数组相同(我们一般通过直接返回得到~)

dtype 输出数组的可选深度;当两个输入数组的深度相同时,可以将dtype设置为-1,这等效于src1.depth()

代码实例

import cv2 as cv

import numpy as np

if __name__ == "__main__":

img1 = cv.imread(r'./2.png', 1) # 读取彩色图片

img2 = cv.imread(r'./3.png', 1)

cv.namedWindow('imag', cv.WINDOW_NORMAL) # 窗体

img1 = img1[0: 200, 0: 400] # 截取图像的指定部分——因为图像混合需要等大的图像

img2 = img2[0: 200, 0: 400]

img = cv.addWeighted(img1, 0.7, img2, 0.3, 0) # 混合图片——根据权重

while True:

cv.imshow('imag', img) # 显示当前序列号图片

k = cv.waitKey(0) & 0xFF

if k == 27:

break

cv.destroyAllWindows()

效果

小练习(产生类似幻灯片渐变的效果)

主要思路

首先准备好一系列等大的图片或者截取一系列相同大小的图片区域作为我们的图像数据

然后将图像信息,分别拼接到一个list列表中

然后,实现一张一张图片的显示,在交换的间隙,实现渐变的效果——也就是图像混合。

然后就可以欣赏了——不过效果的话,主要看设置的参数吧(当然因为没有渲染,可能还是有些僵硬)。

代码示例

我把主要注释放在代码中,边看边理解应该不难~

import cv2 as cv

import numpy as np

if __name__ == "__main__":

img_list = [] # 创建一个空序列装准备显示的一系列图片

counts = 0 # 显示图片的序号

cv.namedWindow('imag', cv.WINDOW_NORMAL) # 窗体

cv.resizeWindow('imag', 500, 500)

for i in range(2, 7): # 遍历图片,凭借到空数组中——一共5张

img = cv.imread(f'./imag_in_save/scr/{i}.png') # 用f""实现参数传入

img = img[0: 200, 0: 400] # 截取图像的指定部分——因为图像混合需要等大的图像

img_list.append(img) # 实现图片添加

while True:

cv.imshow('imag', img_list[counts]) # 显示当前序列号图片

k = cv.waitKey(2000) & 0xFF

counts += 1 # 循环下一张图片——0,1,2,3,4有效

if counts == 5: # 循环到最后一张图片后返回到第一张图片

counts = 0

for i in range(0, 10):

k_f = cv.addWeighted(img_list[counts - 1], 1 - (i * 0.1), img_list[counts], i * 0.1, 0) # 做类似渐变的图像合成

# 实现两张(当前图片和接下来显示的图片)图片,不同权重的混合——由于照片权重改变来实现渐变

cv.imshow('imag', k_f) # 显示混合的图片

k = cv.waitKey(120) & 0xFF # 延时和按键读取

if k == 27: # ESC键

break

if k == 27:

break

cv.destroyAllWindows()

效果(图片可能不是很明显,如有需要可以自己添置几张图片实现看看)

总结

到此这篇关于python opencv 图像边框(填充)添加及图像混合(末尾实现类似幻灯片渐变的效果)的文章就介绍到这了,更多相关opencv 图像边框填充混合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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

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

相关文章

mysql5.7.21备份脚本_Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本

#!/bin/sh#db_backups_conf.txt文件路径db_backups_conf"/wocloud/shell/db_backups_conf.txt"#判断文件是否存在if [ -f "${db_backups_conf}" ];thenecho $(date %Y-%m-%d %H:%M:%S)" 数据库配置信息文件存在,开始进行数据备份"#获…

python嵌套列表操作_python基础(list列表的操作,公共方法,列表嵌套,元祖)...

list 列表索引,切片与str相同。列表的操作(增删改查)1,增加.append()  追加,增加到最后li [alex,wusir,egon,女神,taibai]li.append(ppp)print(li).insert()  中间插入,通过索引li [alex,wusir,egon,女神,taibai]li.insert(…

mybatis mysql selectkey_Mybatis示例之SelectKey的应用

SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。不管SelectKey有多好,尽量不要遇到这种情况吧,毕竟很麻烦。SelectKey需要注意order属性,像Mysql一类支持自动增长类型的…

python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告

学号 2019-2020-2 《Python程序设计》实验3报告课程:《Python程序设计》班级:1924姓名: 万腾阳学号:20192419实验教师:王志强实验日期:2020年5月16日必修/选修: 公选课1.实验内容创建服务端和客…

完成数独的算法 python_python实现数独算法实例

本文实例讲述了python实现数独算法的方法。分享给大家供大家参考。具体如下:# -*- coding: utf-8 -*-Created on 2012-10-5author: Administratorfrom collections import defaultdictimport itertoolsa [[ 0, 7, 0, 0, 0, 0, 0, 0, 0], #0[ 5, 0, 3, 0, 0, 6, 0, …

python读取多个文件csv_Python:读取多个文本文件并写入相应的csv文件

我在别处找不到这个问题的答案,所以我将继续把它贴在这里:我有一个Python脚本,它将读取文本文件的内容,将其内容拆分为单词,然后输出一个CSV文件,该文件将文本缩减为单词频率列表。(最后,我将插…

java treetable_在Swing中创建TreeTable | 学步园

TreeTable是Tree和Table的一个结合-就是一个即能够展开和收起行,同时也能够显示多个列的组件。在Swing的标准包里没有一个叫做JtreeTable的组件,但是我们很容易通过把Jtree做成Jtable的渲染器来创建一个这样的组件。这篇文章就是关于如何使用…

python爬去微博十大流行语_用python重新定义【2019十大网络流行语】-后台/架构/数据库-敏捷大拇指-一个敢保留真话的IT精英社区...

↑关注 置顶 ~ 有趣的不像个技术号52568040f9313098ffa367d9d9d21437.jpg (5.73 KB, 下载次数: 0)2019-12-10 04:43 上传3f4d5fe0016d011a7a68af763314befd.jpg (1.06 KB, 下载次数: 0)2019-12-10 04:43 上传“文明互鉴真硬核,融梗柠檬谁觉得。霸凌第一九九六&…

java中怎么获取配置文件的值_java如何获取配置文件的值

转:原创 编码小王子 发布于2018-10-11 18:07:52 阅读数 2722 收藏展开java大型项目中都会很多系统常量,比如说数据库的账号和密码,以及各种token值等,都需要统一的管理,如果零落的散布到各个类等具体的代码中的话,在后期管理上将是一场灾难,所有需要对这些变量进行统…

python实现队列_用Python实现的数据结构与算法:队列

一、概述队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操作在队首(front)进行。二、ADT队列ADT(抽象数据类型)一般提供以下接口:Queue() 创建队列enqueue(item) 向队尾插入项dequeue() 返回队首的项&#xf…

java 监听窗口是否改变_JAVA项目监听文件是否发生变化

一.spring容器都初始化完成之后做操作packagecom.bijian.study.listener;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextRefreshedEvent;importorg.s…

笨办法学python3 pdf 脚本之家_解决python3输入的坑——input()

如下所示:a,b,c,d input()很简单的代码,如果输入为1 -1 -2 3结果会报错,原因在于input函数会将你的输入作为python脚本运行,那么输入就变成了1-1 -2 3,即0 -2 3结果当然是错误的了,解决办法就是将输入用引…

java 数组写法_java书写、数据类型、数组定义

这里只记录java与php、javascript不同的地方,相同的地方就不赘述了。1.java文件源码为以.java为后缀的文件,字节码文件是以.class为后缀的文件。2.写好一个java源码之后,cmd进入源码文件盘符,用命令 javac helloworld.java将源码转…

python爬虫高级知识点_Python爬虫知识点梳理总结,殿堂级小白入门必读

数据分析是任何技术一样。你应该学习的目标。目标就像灯塔,指引你前进。我见过很多合作伙伴学习学习,然后学会放弃。事实上,很大一部分原因是没有明确的目标,所以你必须清楚学习的目的。你准备学习爬行之前,问问你自己为什么你想学爬行。有些人为了工作,一些为了好玩,和做一定黑…

java running_Running

/****/package test;import java.sql.ResultSet;import java.sql.SQLException;/*** author huangqin**/public class QuestString {private int curPage;//当前页数private int maxPage;//最大页数private int maxRowCount;//总记录数private int pageSize2;//每页显示的记录数…

python停用词表_多版本中文停用词词表 + 多版本英文停用词词表 + python词表合并程序...

文章简介与更新记录如果你只想获取中文停用词此表,请直接到文章结尾下载项目文件,其中包括三个中文停用词词表,一个英文停用词词表和一个合并词表的.py文件2017/07/04 创建文章,上传文件2017/07/04 更新了合并代码,添加了新的中文停用词表(哈工大扩展版本)和一个新的停用词表,现…

mysql collect_set_hive列转行 (collect_set())

一、问题hive如何将a b 1a b 2a b 3c d 4c d 5c d 6变为:a b 1,2,3c d 4,5,6二、数据test.txta b 1a b 2a b 3c d …

python编写递归函数和非递归函数、输出斐波那契数列_分别用非递归和递归的方法编写函数求斐波那契数列第n项。斐波那契数列1,1,2,3,5,8,13,…...

展开全部/**已知Fibonacci数列&#xff1a;1,1,2,3,5,8,……&#xff0c;F(1)1&#xff0c;F(2)1&#xff0c;F(n)F(n-1)F(n-2)*/#include #include typedef long long int int64;//方法1&#xff0c;递归法int64 Fibonacci(int n){int64 sum;if(n<0){printf("参数值e6…

python3.6安装ipython_centos6.5下安装python3.6、pip、ipython

一.先更换系统源为了下载顺畅一般都会更改为国内源。1 cd /etc/yum.repos.d/2 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo #下载网易源3 mv CentOS-Base.repo CentOS-Base.repo.ori #备份源4 mv CentOS6-Base-163.repo CentOS-Base.repo #把网易源更改为默认源二…

java 多线程的同步问题_java多线程解决同步问题的几种方式,原理和代码

wait()/notify()方法await()/signal()方法BlockingQueue阻塞队列方法PipedInputStream/PipedOutputStream阻塞队列的一个简单实现&#xff1a;public class BlockingQueue {private List queue new LinkedList();private int limit 10;public BlockingQueue(int limit){this…