AttributeError: module 'cv2.cv2' has no attribute 'cv'

使用cv2进行获取视频时,系统提示错误AttributeError: module ‘cv2.cv2’ has no attribute ‘cv’。 也在本站找到了解决方法:原博客链接 也是学习人家,记录一下自己遇到的问题。 import numpy as np import cv2 cap = cv2.VideoCapture(0) # Define the codec and create VideoWriter object fourcc = cv2.cv.FOURCC(*'XVID') out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) while(cap.isOpened()): ret, frame = cap.read() if ret==True: frame = cv2.flip(frame,0) # write the flipped frame out.write(frame) cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break else: break # Release everything if job is finished cap.release() out.release() cv2.

error: #127: expected a statement

在编译的时候在if语句处出现error: #127: expected a statement的错误, 经检查发现是在if判断语句缺少大括号{ }。 犯了低级错误

什么是扁平化设计

原文链接:https://gizmodo.com/what-is-flat-design-508963228 译者前言 一个戏剧性的事实,不出意外我现在应该是一名 Android 开发工程师,意外是指遇到了 Angular,戏剧是指这俩都是 Google 的!而 Google 最出名的设计语言是 Material Design。 我最近一直在忙于自己项目的设计(https://github.com/wizaaard/wizard),其实前端最终反馈给用户的第一直觉就是 UI,我喜欢 Material Design 却不知如何下手,于是这几天我到处寻找 Material Design 的资料,找到了这一篇我认为比较好的文章,于是翻译出来跟大家分享😄。 欢迎大家勘错,来自一名最不前端的前端工程师 😃 什么是扁平化设计 随着 IOS7 的即将发布,Jony Ive 为了破坏性的更改而呼声高涨,大家都知道 Apple 将进行改头换面的扁平化设计,但是对于刚接触的人来说,“扁平化设计” 是一个容易让人困惑的词,所以让我们说出来吧! “扁平化设计” 是对于设计哲学的 shorthand (Flat Design is shorthand for a design philosophy) 看看你的电脑桌面,或者 IPhone 的计算器,或者你的 Ipad newstand,这些东西被设计成声音和外观都和真实世界的对应的物品一样,但是我们真的需要这些虚拟的暗示和额外的设计吗?提倡扁平化设计的人并不这么认为。 这个争论的点在 UI 材料的简洁度,清晰度,纯粹度(译注:honest) 相反,扁平化设计的拥护者认为 GUI (graphical user interfaces) 应该避免样式对功能的描述(should eschew style for functionality),意思是说应该避免(UI)倾斜的(beveled),有边缘的(edges),渐变的(gradients),有阴影的(shadows)和反射(reflection),以及创造一个可以发挥数字系统优势的用户体验,而不是把用户限制在熟悉的真实世界的类比物中,扁平化的页面很少在方程式(equation 译注:每个材料的设计计算程式)中引入尺寸精确的(dimensionally),有阴影的或者有纹理的,而是依赖视差(parallax)的滚动和视觉的清晰度来进行交流。 扁平化设计的一个很好的例子是 Google Now (https://www.google.com/search/about/),它使用类似卡片系统来显示信息骨架(information bracket)。而不是将信息隔离在静态图标里,现在展示的数据在一个可读性良好,很容易滑动的标准尺寸的卡片中。其他的例子?Windows8 是 Microsoft 的 Metro 设计语言的衍生物(descended)(metro 的一个实现),通过图形来帮助用户理解他们所看见的信息的内容,从而使得排版和信息的传递更有价值。

2020 前端面试题总结大全 及 答案

1、link和@import的区别 1、link是html的标签,不仅可以加载css还可以定义Rss , rel连接属性;@import是css的语法规则,只能引入样式; 2、加载页面时,link是同时加载的,@impor是页面加载完后才加载 3、link没有兼容性的问题,而@import只在较高版本的浏览器才可以识别 4、link可以通过js插入操作dom,@import 不可以! 查看更多企业面试真题 2、如何理解js中的原型链 1;每个构造函数都有一个原型对象 2;每个原型对象都有一个指向构造函数的指针 3;每个实例函数都有一个指向原型对象的指针。 4;查找方式是一层一层查找,直至顶层。Object.prototype 3、怎么理解js中的内存泄露 定义:程序不需要的内存,由于某些原因其不会返回到操作系统或者可用内存池中。 内存泄露会导致(运行缓慢 ,高延迟,崩溃)的问题 常见的导致内存泄露的原因有: 1;意外的全局变量 2;被遗忘的计时器或回调函数 3;脱离文档的DOM的引用 4;闭包 4、跨域问题 由于浏览器的同源策略会导致跨域,同源策略又分为 一:DOM同源策略:禁止对不同源页面的DOM进行操作,主要是不同域名的ifram是限制互相访问的 二:xmlHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起http请求,只要域名 协议 端口有一个不同都被当做不同的域之间的请求,即跨域请求 解决方式: 1、CORS跨域资源共享 后端需要设置Access--Control-Allow-Credentials:true 2、jsonp实现跨域:动态创建script,利用src属性进行跨域 3、 nginx代理跨域 4、nodejs中间件代理跨域 5、WebSokect协跨域 6、window.name+ifram跨域 5、vuex:Vue.js应用程序的状态管理模式+库。 1、state 保存vuex中的数据源,通过this.$store.state获取 2、getters 用于监听state中的值的变化,返回计算后的结果。getter的返回值会根据它的依赖被缓存起来 3、mutations 是修改store中的值得唯一方式 4、action 官方建议提交一个actions,在actions中提交mutations再去修改状态值。 this.$store.dispatch('add') //this.$store.commit('add') 5、modules 模块化 6、vue的生命周期 Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期。 beforeCreate: vue元素的挂载元素el和数据都为undefined,还未初始化; created:vue实例的数据对象data有了,el还没有; beforeMount:vue实例的$el和data都初始化了,但是还挂载在之前的虚拟dom节点上,data.message还未替换; mounted:vue实例挂载完成,data.message成功渲染。 更新前后:data变化时会触发beforeUpdate和updated方法; 销毁前后:beforeDestory和destoryed,在执行destoryed方法后,对data的改变不会触发周期函数,说明vue实例已经解除了事件监听以及dom绑定,但是dom结构依然存在; vue生命周期的作用: 他的生命周期中有多个事件钩子,让我们控制整个vue实例的过程时更容易形成良好的逻辑。 生命周期钩子的一些使用方法: beforeCreate:loading事件,在加载实例时触发。 created:初始化完成事件,异步请求。 mounted:挂载元素,获取dom节点 uptaded:对数据统一处理 beforeDestory:确认事件停止。 nextTick:更新数据后立即操作dom。 7、computed和watch的区别 computed 计算结果并返回,只有当被计算的属性发生改变时才会触发(即:计算属性的结果会被缓存,除非依赖的响应属性变化才会重新及孙) watch 监听某一个值,当被监听的值发生变化时,执行相关操作。(与computed的区别是,watch更加适用于监听某一个值得变化,并做对应操作,比如请求后太接口等。而computed适用于计算已有的值并返回结果。) 监听简单数据类型: data(){ return{ 'first':2 } }, watch:{ first(){ console.

Anaconda3一些常用命令

conda -V 查看安装版本 conda env list conda info -e 查看所有虚拟环境 conda list 查看所有安装包 conda create --name env_name python=X.X(3.7,3.6,2.7等) 创建虚拟环境 conda activate env_name 激活虚拟环境 conda remove --name env_name --all 删除虚拟环境 conda list --name [虚拟环境名] #查看指定虚拟环境下的package #克隆 conda create --name [虚拟环境名] -- clone [colne的环境] #创建一个和原python环境一样的虚拟环境 conda create --name mybase --clone base conda install you-get 安装第三方包

2020年一些前端的面试题(含答案)

1、css实现图片自适应宽高 img { max-width: 100%; max-height: 100%; } 2、什么是flex,写出常见属性,以及作用 Flex即:Flexible Box,弹性布局,用来为盒状模型提供最大的灵活性。可以实现类似垂直居中布局。 .box{ display: flex; } .box{ display: inline-flex; } // Webkit内核的浏览器,必须加上-webkit前缀 .box{ display: -webkit-flex; /* Safari */ display: flex; } 设为Flex布局以后,子元素的float、clear和vertical-align属性将失效 采用Flex布局的元素,称为Flex容器(flex container) 所有子元素自动成为容器成员,称为Flex项目(flex item) 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。 查看更多面试题

C语言打开文件详解

C语言中操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。 打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,程序还可以记录当前读写到了哪个位置,下次可以在此基础上继续操作。 标准输入文件 stdin(表示键盘)、标准输出文件 stdout(表示显示器)、标准错误文件 stderr(表示显示器)是由系统打开的,可直接使用。 使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为: FILE *fopen(char *filename, char *mode); filename为文件名(包括文件路径),mode为打开方式,它们都是字符串。 fopen() 函数的返回值 fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的结构体变量中,然后将该变量的地址返回。 FILE 是 <stdio.h> 头文件中的一个结构体,它专门用来保存文件信息。 如果希望接收 fopen() 的返回值,就需要定义一个 FILE 类型的指针。例如: FILE *fp = fopen("demo.txt", "r"); 表示以“只读”方式打开当前目录下的 demo.txt 文件,并使 fp 指向该文件,这样就可以通过 fp 来操作 demo.txt 了。fp 通常被称为文件指针。 再来看一个例子: FILE *fp = fopen("D:\\demo.txt","rb+"); 表示以二进制方式打开 D 盘下的 demo.txt 文件,允许读和写。 判断文件是否打开成功 打开文件出错时,fopen() 将返回一个空指针,也就是 NULL,我们可以利用这一点来判断文件是否打开成功,请看下面的代码: FILE *fp; if( (fp=fopen("D:\\demo.txt","rb") == NULL ){ printf("Fail to open file!

全选 单选 反选

一、编写全选 单选和反选框,关于css样式个根据自身需求自行编写 <input type="checkbox">全选 <input type="checkbox">反选 <ul> <input type="checkbox">单选 <input type="checkbox">单选 <input type="checkbox">单选 </ul> 二、功能实现部分 引用jquery-1.11.0.js进行代码编写 <script> $(function(){ // 全选功能 var num = 0; $("input").eq(0).click(function(){ num++; if(num % 2 == 1){ $("ul").children().prop("checked",true); }else{ $("ul").children().prop("checked",false); } }) //单选中存在一个不为选中状态 全选则同样不为选中状态 $("ul").children().click(function(){ var count = 0 $("ul").children().map(function(){ if($(this).prop("checked")){ count++; } }) if(count == $("ul").children().length){ $("input").eq(0).prop("checked",true) }else{ $("input").eq(0).prop("checked",false) } }) // 反选 $("input").eq(1).click(function(){ $("ul").children().map(function(){ if($(this).prop("checked") == true){ $(this).prop("checked",false) }else{ $(this).prop("checked",true) } }) }) }) </script>

给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

1.给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100] 示例 2: 输入:[-7,-3,2,3,11] 输出:[4,9,9,49,121] 提示: 1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A 已按非递减顺序排序。 2.代码展示 /** * Note: The returned array must be malloced, assume caller calls free(). */ void sort(int* A, int ASize) { for (int i=0; i<ASize; i++) { int flag = 0; for (int j=1; j<=ASize-1-i; j++) { if (A[j-1]>A[j]) { flag = 1; int tmp= A[j-1]; A[j-1] =A[j]; A[j] = tmp; } } if(flag == 0) { break; } } } int* sortedSquares(int* A, int ASize, int* returnSize) { *returnSize =ASize; for(int i=0; i<ASize; i++) { A[i] *=A[i]; } sort(A,ASize); return A; } 3.

Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决

Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决 我在阿里轻量应用服务器搭建ftp服务器这篇博客中把防火墙换为iptables,因为当时无论我怎么设置firewalld,就是无法访问ftp服务器,今天在翻看其他博客的时候,突然发现firewalld有打开服务这么一个命令,然后我就找到了解决的办法. 查看当前开了哪些端口其实一个服务对应一个端口,每个服务对应/usr/lib/firewalld/services下面一个xml文件。 firewall-cmd --list-services 通过这个命令我们查看当前打开了那些服务,比如下面这个 我开启了两个服务,但是没有开启http和ftp服务,所以不能通过外网访问搭建的nginx服务器和ftp服务器 (1)可以通过下面这个命令查看可以打开的服务有哪些 firewall-cmd --get-services (2)可以通过下面的命令添加一个服务到firewalld firewall-cmd --add-service=http //http换成想要开放的service 这样添加的service当前立刻生效,但系统下次启动就失效,可以测试使用。要永久开发一个service,加上 --permanent firewall-cmd --permanent --add-service=http 然后通过systemctl restart firewalld.service重启防火墙就生效了 这个时候就可以通过外网访问搭建的nginx和ftp服务器了.

C语言带参数的宏定义

C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。 对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。 带参宏定义的一般形式为: #define 宏名(形参列表) 字符串 在字符串中可以含有各个形参。 带参宏调用的一般形式为: 宏名(实参列表); 例如: #define M(y) y*y+3*y //宏定义 // TODO: k=M(5); //宏调用 在宏展开时,用实参 5 去代替形参 y,经预处理程序展开后的语句为k=55+35。 示例 输出两个数中较大的数。 #include <stdio.h> #define MAX(a,b) (a>b) ? a : b int main(){ int x , y, max; printf("input two numbers: "); scanf("%d %d", &x, &y); max = MAX(x, y); printf("max=%d\n", max); return 0; } 运行结果: input two numbers: 10 20 max=20 程序第 2 行定义了一个带参数的宏,用宏名MAX表示条件表达式(a>b) ? a : b,形参 a、b 均出现在条件表达式中。程序第 7 行max = MAX(x, y)为宏调用,实参 x、y 将用来代替形参 a、b。宏展开后该语句为:

三种写法带你彻底搞懂 N皇后问题——C语言

问题描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 代码如下: #include<stdio.h> #include<math.h> #define N 100 //最多摆放100个皇后 int n,queen[N]; void Putqueen(int k) //假设前k个皇后已经摆好,现在摆放第K个皇后 { int i,j; if(k==n) { for(i=0;i<n;i++) { printf("(%d,%d)\t",i+1,queen[i]+1); } printf("\n"); } else { for(i=0;i<n;++i) //检查皇后摆放位置 { for(j=0;j<k;++j) //检查和前k个皇后是否冲突 { if(i==queen[j]||abs(queen[j]-i)==abs(j-k)) { break; } } if(j==k) { queen[k]=i; Putqueen(k+1); } }//for(i=0;i<n;++i) } } int main() { scanf("%d",&n); Putqueen(0); return 0; } #include<stdio.h> #include<math.h> #define N 100 //最多摆放100个皇后 int n,queen[N]; void Putqueen(int k) { int i,j,ok; if(k==n) //递归出口 { for(i=0;i<n;i++) printf("

【正文】将Git-bash添加到Windows terminal

将Git-bash添加到Windows terminal 前言1.打开terminal的配置文件2.添加代码3.美化 前言 最近学习了一下git,发现window的git-bash看起来像自带cmd一样,就想能不能把它放到terminal中方便管理打开且美观,直接进教程。没有terminal的在微软商店就可以下载。 1.打开terminal的配置文件 配置文件是一个json格式的文件。直接找到名为键为"profiles"的区域,添加一段代码就好了。 图片的代码不是我们要添加的,截图出来更好的了解添加的代码格式。格式上是 2.添加代码 , { "acrylicOpacity": 0.9, // 透明度 "useAcrylic": true, // 是否开启透明度 "closeOnExit": true, // 关闭的时候退出命令终端 "colorScheme": "Campbell", // 样式配置,如果没有这个样式可以自行修改或者注释 "commandline": "D:\\Applications\\Scoop\\shims\\apps\\git\\2.25.1.windows.1\\bin\\bash.exe", // gitbash的命令行所在位置 "fontSize": 12, // 终端字体大小 "guid": "{1c4de342-38b7-51cf-b940-2309a097f589}", // 唯一的标识 "icon": "D:\\Applications\\Scoop\\shims\\apps\\git\\2.25.1.windows.1\\git-icon.png", // git的图标,打开终端时候会看到 "name": "Git-Bash", // tab栏的标题显示 "padding": "10, 0, 10, 10", // 边距 "startingDirectory": "D:\\WorkSpace\\GitSpace" // gitbash的启动的位置 } 以上代码有注释,看注释修改。 最重要的参数是"commandline"这个参数替换成电脑git安装目录中bin下的bash文件的路径。 3.美化 对于美化可以在"schemes"下,同样的操作添加一些美化代码,添加完成后,在上面的"colorScheme"替换。美化的代码网上很多。

阿里云中nginx无法访问图片

我遇到的问题如下: 上图是本地的springboot的application.properties配置文件和本地nginx配置。 当访问http://localhost:8087/images时,等同于访问F:\afei_code1\imgs, 所以当访问本地F:\afei_code1\imgs路径下名为1493370993的文件夹下图片 property-07.jpg时, 直接访问http://localhost:8087/images/1493370993/property-07.jpg, 等于访问F:\afei_code1\imgs/1493370993/property-07.jpg,此时可以访问成功。 但是,当我在阿里云的宝塔页面里安装nginx时,问题出现了, 搞了很久最后无意间搞好,原理就是,把宝塔内的nginx的配置文件中不需要的给删掉,最后配置内容如下:

python利用pandas对两张excel表合并(一)

工作中,我们会经常遇到需要对表中记录进行合并的情况,如下图所示: 需要得到如下结果: 下面我将通过几行python代码实现上述功能: import pandas as pd # 读取1表(参数分别为1工作薄名称及其目录,2哪张表) df1 = pd.read_excel(r'D:/myExcel/1.xlsx', 'Sheet1') # 读取2表(参数分别为1工作薄名称及其目录,2哪张表) df2 = pd.read_excel(r'D:/myExcel/2.xlsx', 'Sheet1') # 对结果按行进行连接,入参为列表,列表中的内容为你需要合并的内容 df = pd.concat([df1, df2]) # 将结果输出到excel表格中,需要设置index=None # index指的是在读取表时,如果不指定,pandas会默认为每行添加一个索引,输出时需要把默认添加的索引删除掉 df.to_excel(r'D:/myExcel/res.xlsx', 'Sheet1', index=None) 哈哈,如上就是python对两张表进行合并(按行添加)的结果,下一次我将讲述按列进行合并时的操作。如果您有兴趣,欢迎关注我的微信公众号:python小工具。

Java实现 LeetCode 25 K个一组翻转链表

25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明 : 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 PS: 这链表你品 你细品~~~ /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode prev = null; ListNode cur = head; ListNode next = null; ListNode check = head; int canProceed = 0; int count = 0; // 检查链表长度是否满足翻转 while (canProceed < k && check !

Session 'app': Installation did not succeed.The application could not be installed: INSTALL FAILED I

在Android Studio中使用模拟器进行调试的时候,会出现错误信息无法进行模拟器调试 错误信息 Session 'app': Installation did not succeed.The application could not be installed: INSTALL FAILED INSUFFICIENT STORAGE Retry 要想解决这个问题,我们首先要知道错误是什么? Session 'app':安装失败。无法安装应用程序:安装失败,存储空间不足,请重试 这个问题是很好解决的,只需要清理一下缓存就可以了。 点击最上面一行菜单栏的Build选项,选择 Clean Project 清理缓存之后,重启Android Studio就好了。

github最大文件限制

1,单个文件建议不超过50M warning:this is larger than GitHub’s recommended maximum file size of 50.00 MB 2,单个文件禁止超过100M error:this exceeds GitHub’s file size limit of 100.00 MB 3,解决方案(使用Git Large File Storage) 3.1 安装(在MAC上使用Homebrew安装) brew install git-lfs 3.2 选择您希望Git LFS管理的文件类型(或直接编辑.gitattributes)。您可以随时配置其他文件扩展名。这一步成功后会生成一个gitattributes文件 git lfs track “* .txt” # 这里的 “ *.txt "就是你要上传的大文件的路径 3.3 添加并commit .gitattributes文件 git add .gitattributes git commit .gitattributes git push Note:要单独将.gitattributes文件push到远端后再来对具体的大文件进行操作 3.4 添加并commit 大文件 git add “*.txt” git commit git push

10_1、斐波那契数列

斐波那契数列 题目描述 写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下: 思路分析 解法一:根据斐波那契数列的定义方程式写出最直观的递归。效率较低,存在很多重复计算。代码如下: public int Fibonacci(int n) { if(n==0)return 0; if(n==1)return 1; return Fibonacci(n-1)+Fibonacci(n-2); } 解法二:为解决解法一的重复计算,可以把已经计算出来的数列中间项保存起来,用于下一次计算。代码如下: public int Fibonacci(int n) { if(n==0)return 0; if(n==1)return 1; int first=0,second=1,FibN=0; for(int i=2;i<=n;i++){ FibN=first+second; first=second; second=FibN; } return FibN; }