prism

Python玩转各种多媒体,视频、音频到图片

爷,独闯天下 提交于 2020-04-10 15:33:45
Python玩转各种多媒体,视频、音频到图片 我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑、字幕编辑、分离音频、视频音频混流等。又比如对音频文件的操作:音频剪辑,音频格式转换。再比如我们最常用的图片文件,格式转换、各个属性的编辑等。因为多媒体文件的操作众多,本文选取一些极具代表性的操作,以代码的形式实现各个操作。 一、图片操作 操作图片的模块有许多,其中比较常用的两个就是 Pillow 和 opencv ,两个模块各有优势。其中 opencv 是计算机视觉处理的开源模块,应用的范围更加广泛,从图像处理到视频处理,再到物体检测等。而 pillow 相比直线就单纯的多,其大多数操作都是围绕图像而展开的。 1.1、格式转换 图片格式有多种多样,最直观的感受就是图片后缀。而格式之间的差异不仅仅是后缀的差异,最为明显的就是 png 格式图片,同其它图片有着最为直观的区别。下面我们就看看在Python中如何转换格式,我们先安装 pillow 模块: pip install pillow 然后看看如何导入模块以及如何读取图像: from PIL import Image # 读取图像 img = Image . open ( 'ycjc.jpg' ) # 显示图像 img . show ( ) 我们有了上面的基础操作之后,就可以开始进行格式转换了

今天学下Java中的数组之【动态初始化】

馋奶兔 提交于 2020-04-10 15:31:27
本人初学者,正在自学Java,希望各位多多指点。O(∩_∩)O 数组的特点及创建 数组:是一容器 ,可以同时存放多个数据值。 数组的特点: 1.数组是一种引用数据类型 2.数组当中的多个数据,类型必须统一 3.数组的长度再程序运行期间不可改变 数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。 两种常见的初始化方式:: 1.动态初始化(指定长度) 2.静态初始化(指定内容) 动态初始化数组的格式: 数据类型 [] 数组名称 = new 数据类型 [数组长度] 含义: 左侧数据类型,也就是数组当中保存的数据,全都是统一的什么类型 左侧的中括号,代表我是一个数组 左侧数组名称,给数组取一个名字 右侧的new,代表创建数组的动作 右侧的数据类型,必须和左侧的数据类型保持一致 右侧中括号的长度,也就是数组当中,到底可以保存多少个数据,是一个int数字 public class Demo01Array { //还是要遵循驼峰命名规则 public static void main ( String [ ] args ) { //创建一个数组,里面可以存放300个int数据 //数据类型 [] 数组名称 = new 数据类型 [数组长度] int arrayDemoOne [ ] = new int [ 300 ] ; System . out . println (

4-8.goto语句与深层循环

穿精又带淫゛_ 提交于 2020-04-10 14:55:11
goto语句作用 跳出深层循环(嵌套的循环) 实现循环(与汇编的实现方式类似) 跳出深层循环实现 # include <iostream> using namespace std ; int main ( int argc , char * argv [ ] ) { //为了理解goto语句,我们解决下面一个问题为例 /* 一个数列: 1 2 3 4 5 6 7 8 9 10 11 12 如果只想输出1,2,5,6,9,10, */ /*************************双层循环*************************/ int intArray [ 3 ] [ 4 ] = { { 1 , 2 , 3 , 4 } , { 5 , 6 , 7 , 8 } , { 9 , 10 , 11 , 12 } } ; //计算二维数组的行、列的方法 int colSize = sizeof ( intArray [ 0 ] ) / sizeof ( int ) ; int rowSize = sizeof ( intArray ) / sizeof ( int ) / colSize ; cout << "行:" << colSize << endl ; cout << "列:" << rowSize << endl ; //对第一层进行循环 for ( int i =

海思3516D闪屏问题-修复

眉间皱痕 提交于 2020-04-10 14:53:54
海思3516D闪屏问题-修复 结论: 闪屏原因: 以前使用错误: 相机还存在问题: 结论: 闪屏问题的根本原因是海思AE处理的有问题,而我们现场的问题尤为复杂,修改了以下几个地方: 1 去掉了抗闪功能,抗闪功能和WDR一同使用会有闪屏问题。 2 增加数字增益调节,sensor增益调节有again和dgain,代码中只有again的调节,没有dgain,经验证dgain也会或多或少影响闪烁。 3 调整感兴趣区域权重值。 4 目标亮度值从65改到128 调整了这4个地方后,闪屏问题得到解决。如果还有问题,还可以继续优化。 闪屏原因: 1 抗闪+WRD,同时使用很容易出现闪屏。抗闪功能一般室内使用,过滤灯光产生的波纹形闪烁。而我们设备抗闪一直处于打开状态。 2 AE的增益和曝光时间配置不对,我核对了imx290的芯片手册和海思的290demo,配置方式应该没有问题,只是数字增益写死是0了。这个也可能导致某些轻微的闪烁。 3 感兴趣区域权重值,此值过高,会使曝光策略为高光优先的模式,为了防止过曝,适当降低亮度值,而当AE算法发现画面亮度比目标亮度小了,又会增加亮度值,这一增一减,也会造成闪烁。 4 自动曝光调整速度,u8Speed,某些sensor在wdr模式下,此值>64也可能导致画面闪烁。 5 曝光时间和sensor增益不满足线性关系,比如曝光量为4096,可以分配曝光时间2

SSL通信双方如何判断对方采用了国密

淺唱寂寞╮ 提交于 2020-04-10 12:01:46
SSL通信双方如何判断对方采用了国密 14 天前 2020-03-25 21:45:11 阅读 720 https://cloud.tencent.com/developer/search/article-国密 SSL通信涉及两方的参与者,通常采用的模型是Client/Server。如果我们开发Client端产品(比如浏览器),可能会和多方的Server产品对接。那么问题来了,双方是如何知道对方使用了国密算法呢?这个问题非常重要,只有双方采用同样的加密标准,才能正常通信。难道采用“天王盖地虎,宝塔镇河妖”的接头暗号? 在揭开这个谜底之前,我们先了解一下OID(Object Identifier,对象标志符),然后再聊一聊密码套件(Cipher Suite),就可以慢慢理解SSL通信双方是如何接上头的。当然,整个SSL通信涉及到很多标准和协议,不是一篇文章能讲完的,所以本文只是抛砖引玉,探讨一些基本的概念。可能对于资深人士而言,不值得一提,但我初入门时,也是摸索了好久,才慢慢能深入到细节。 OID OID是由ISO/IEC、ITU-T国际标准化组织上世纪80年代联合提出的标识机制,其野心很大,为任何类型的对象(包括实体对象、虚拟对象和组合对象)进行全球唯一命名。通过唯一的编码,我们就可以识别出对象。但要为所有对象进行唯一命名,其难度和工作量都很大,所以它采用了分层树形结构。

Vue.observable源码解读(by实例)

本秂侑毒 提交于 2020-04-10 10:38:02
Vue.observable 官方文档: https://cn.vuejs.org/v2/api/#Vue-observable 实例: Vue.observable < body > < div id = " root " > {{message}} < button @click = " change " > Change </ button > </ div > < script > const state = Vue . observable ( { message : 'Vue 2.6' } ) const mutation = { setMessage ( value ) { state . message = value } } new Vue ( { el : '#root' , computed : { message ( ) { return state . message } } , methods : { change ( ) { mutation . setMessage ( 'Vue 3.0' ) } } } ) </ script > </ body > 官方解释: Vue.observable(object) 是vue2.6版本新增的全局API,它可以让一个对象可响应。Vue 内部会用它来处理 data 函数返回的对象。

Leetcode: NO.1249 移除无效的括号

我们两清 提交于 2020-04-10 10:23:44
题目 链接:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses 给你一个由 '('、')' 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下 任意一条 要求: 空字符串或只包含小写字母的字符串 可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」 可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」 示例 1 : 输入:s = "lee(t(c)o)de)" 输出: "lee(t(c)o)de" 解释: "lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案。 示例 2 : 输入:s = "a)b(c)d" 输出: "ab(c)d" 示例 3 : 输入:s = "))((" 输出: "" 解释:空字符串也是有效的 示例 4 : 输入:s = "(a(b(c)d)" 输出: "a(b(c)d)" 提示: 1 < = s . length < = 10 ^ 5 s [ i ] 可能是 '(' 、 ')' 或英文小写字母 解题记录 第一个 '(' 之前的 ')' 都不要

Leetcode: NO.20 有效的括号

点点圈 提交于 2020-04-10 10:22:45
题目 链接:https://leetcode-cn.com/problems/valid-parentheses 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1 : 输入 : "()" 输出 : true 示例 2 : 输入 : "()[]{}" 输出 : true 示例 3 : 输入 : "(]" 输出 : false 示例 4 : 输入 : "([)]" 输出 : false 示例 5 : 输入 : "{[]}" 输出 : true 解题记录 通过对左括号的存储,以及右括号的判断来确定是否为完整的有效的括号序列: class Solution { public boolean isValid ( String s ) { char [ ] seq = s . toCharArray ( ) ; int len = seq . length ; if ( len == 0 ) return true ; if ( len % 2 != 0 ) return false ; char [ ] info = new char [ seq . length ] ; int index = 0 ; info [

Leetcode: NO.1247 交换字符使得字符串相同

我的未来我决定 提交于 2020-04-10 10:16:06
题目 链接:https://leetcode-cn.com/problems/minimum-swaps-to-make-strings-equal 有两个长度相同的字符串 s1 和 s2 ,且它们其中 只含有 字符 "x" 和 "y" ,你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。 交换只能发生在两个不同的字符串之间,绝对不能发生在同一个字符串内部。也就是说,我们可以交换 s1[i] 和 s2[j] ,但不能交换 s1[i] 和 s1[j] 。 最后,请你返回使 s1 和 s2 相同的最小交换次数,如果没有方法能够使得这两个字符串相同,则返回 -1 。 示例 1 : 输入:s1 = "xx" , s2 = "yy" 输出: 1 解释: 交换 s1 [ 0 ] 和 s2 [ 1 ] ,得到 s1 = "yx" ,s2 = "yx" 。 示例 2 : 输入:s1 = "xy" , s2 = "yx" 输出: 2 解释: 交换 s1 [ 0 ] 和 s2 [ 0 ] ,得到 s1 = "yy" ,s2 = "xx" 。 交换 s1 [ 0 ] 和 s2 [ 1 ] ,得到 s1 = "xy" ,s2 = "xy" 。 注意,你不能交换 s1 [ 0 ] 和 s1 [ 1 ] 使得 s1 变成 "yx"

Leetcode: NO.22 括号生成

回眸只為那壹抹淺笑 提交于 2020-04-10 10:15:42
题目 题目链接:https://leetcode-cn.com/problems/generate-parentheses 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例: 输入:n = 3 输出: [ "((()))" , "(()())" , "(())()" , "()(())" , "()()()" ] 解题记录 看一下规律,起始一定是 '(' ,左括号和右括号的个数一定相等且等于n,这里使用递归求出可行字符串插入到列表中: class Solution { int N ; List < String > total = new ArrayList < > ( ) ; public List < String > generateParenthesis ( int n ) { N = n ; addStr ( "(" , 1 , 0 ) ; return total ; } public void addStr ( String seq , int left , int right ) { if ( seq . length ( ) == N * 2 ) { total . add ( seq ) ; } else { if ( left < N ) addStr ( seq + "(" , left + 1 ,