map是一個高級函數(shù),第一個參數(shù)為函數(shù),第二個參數(shù)為可迭代對象(如列表,字符串等), 其作用就是把可迭代對象里的每個元素都應(yīng)用到第一個函數(shù)中
創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元二道江做網(wǎng)站,已為上家服務(wù),為二道江各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
形象解釋:
map(f,?[x1,?x2,?...,?xn])?=?[f(x1),?f(x2),?f(x3),...,?f(xn)]
不加括號表示這個函數(shù),加了括號就是在調(diào)用這個函數(shù)并返回值了
舉個例子:
def?f():
return?1
print(f)
print(f())
輸出結(jié)果:
function f at 0x7fb59035f578
1
第一個打印的是函數(shù)及其內(nèi)存地址,第二個打印的是調(diào)用函數(shù)f后返回的值(也就是1)
所以說不能加括號
聽別人分享提到了CAP曲線,網(wǎng)上資料比較少,自己動手實踐一發(fā)
輸入: predictions , labels , cut_point
數(shù)據(jù)預(yù)覽,左列l(wèi)abels,右列predictions
模型預(yù)測壞客戶/企業(yè)的能力較好,和最優(yōu)模型的接近程度為0.81
用python讀取視頻有兩種主要方法,大家可依據(jù)自己的需求進行使用。
方法一:
使用imageio庫,沒有安裝的可用pip安裝或自己下載。自己下載的話給大家推薦一個鏡像網(wǎng)站:[pip鏡像](mageio/%20python%E5%BA%93%E9%95%9C%E5%83%8F%E7%BD%91%E7%AB%99),安裝好后重啟終端即可調(diào)用。1234
import pylabimport imageio#視頻的絕對路徑filename = '/path/to/your/video.mp4'#可以選擇解碼工具vid = imageio.get_reader(filename, 'ffmpeg')for im in enumerate(vid): #image的類型是mageio.core.util.Image可用下面這一注釋行轉(zhuǎn)換為arrary
#image = skimage.img_as_float(im).astype(np.float32)
fig = pylab.figure()
fig.suptitle('image #{}'.format(num), fontsize=20)
pylab.imshow(image)
pylab.show()12345678910111213
方法二:
用cv2庫,用這種方法的好處是返回的就是arrary,不用轉(zhuǎn)換,但方法一可以指定顯示某一幀,而這種方法是從頭讀到尾。
import numpy as npimport matplotlib.pyplot as pltimport pylabimport imageioimport skimage.ioimport numpy as np
import cv2
cap = cv2.VideoCapture('/path/to/your/video.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('image', frame)
k = cv2.waitKey(20)
#q鍵退出
if (k 0xff == ord('q')):
break cap.release()
cv2.destroyAllWindows()1234567891011121314151617181920
大家可能注意到,兩種方法的顯示方法也是不一樣的,這里不詳細(xì)展開,實踐一下便很清楚了。
def?cap_upper(lista):
for?i?in?xrange(len(lista)):
lista[i]=lista[i][0].upper()+lista[i][1:]
return?lista
aaa=['dog','cat']
print?cap_upper(aaa)
不過我記得有個首字母大寫函數(shù)capitalize(),直接循環(huán)調(diào)用這函數(shù)就行
可以,用PYQT+CV2,四個USB連接成功,程序如下,UI要自己搞了,放不下
# -*- coding: utf-8 -*-
import sys#, time
from PyQt5 import QtWidgets
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from Ui_cv2ui_thread import Ui_MainWindow
import cv2 as cv
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import (QApplication, QDialog, QFileDialog, QGridLayout,
QLabel, QPushButton, QColorDialog)
import numpy as np
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.setupUi(self) #這個一定要在這個最前面位置
# define the slot for pushbutton to save the merged image
self.pushButton.clicked.connect(self.savemergeimage)
self.img = np.ndarray(()) #空的numpy array
self.img1 = np.ndarray(())
self.img2= np.ndarray(())
self.img3= np.ndarray(())
self.img4= np.ndarray(())
self.img4= np.empty([960,1280, 3], int)
self.cap = cv.VideoCapture(3) #注意,由大開到小,很重要
self.cap.set(3, 640) # setup the resolution of CCD
self.cap.set(4, 480)
ret, self.img=self.cap.read()
self.cap1 = cv.VideoCapture(2)
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1=self.cap1.read()
self.cap2 = cv.VideoCapture(1)
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2=self.cap2.read()
self.cap3 = cv.VideoCapture(0)
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3=self.cap3.read()
#time.sleep(1)也許需要延遲,等他準(zhǔn)備好
# 初始化一個定時器,在其他條件下用的
#self.timer = QTimer(self)
# 實例化一個線程
self.work0= WorkThread()
self.work0.trigger.connect(self.ccd2)
# 定義時間任務(wù)是一次性任務(wù)就設(shè)定下一行
#self.timer.setSingleShot(True)
# 啟動時間任務(wù),注意一致性
self.work0.start()
# 實例化一個線程
self.work= WorkThread()
# 多線程的信號觸發(fā)連接到ccd3
self.work.trigger.connect(self.ccd3)
self.work.start()
# 實例化一個線程
self.work2 = WorkThread()
# 多線程的信號觸發(fā)連接到ccd4
self.work2.trigger.connect(self.ccd4)
self.work2.start()
# 實例化一個線程
self.work3 = WorkThread()
# 多線程的信號觸發(fā)連接到ccd1
self.work3.trigger.connect(self.ccdmerge)
self.work3.start()
self.work4 = WorkThread()
# 多線程的信號觸發(fā)連接到ccd1
self.work4.trigger.connect(self.ccd1)
self.work4.start()
def refreshShowa(self):#顯示ccd1到label1
# 提取圖像的尺寸和通道, 用于將opencv下的image轉(zhuǎn)換成Qimage
height, width, channel = self.img.shape
bytesPerLine = 3 * width
self.qImg = QImage(self.img.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label.setPixmap(QPixmap.fromImage(self.qImg))
def refreshShowb(self):#顯示ccd2到label2
# 提取圖像的尺寸和通道, 用于將opencv下的image轉(zhuǎn)換成Qimage
height, width, channel = self.img1.shape
bytesPerLine = 3 * width
self.qImg1 = QImage(self.img1.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_2.setPixmap(QPixmap.fromImage( self.qImg1))
def refreshShowc(self):#顯示ccd3到label3
# 提取圖像的尺寸和通道, 用于將opencv下的image轉(zhuǎn)換成Qimage
height, width, channel = self.img2.shape
bytesPerLine = 3 * width
self.qImg2 = QImage(self.img2.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_3.setPixmap(QPixmap.fromImage( self.qImg2))
def refreshShowd(self):#顯示ccd4到label4
# 提取圖像的尺寸和通道, 用于將opencv下的image轉(zhuǎn)換成Qimage
height, width, channel = self.img3.shape
bytesPerLine = 3 * width
self.qImg3 = QImage(self.img3.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_4.setPixmap(QPixmap.fromImage( self.qImg3))
def refreshShowe(self):#顯示合并的影像到label6
# 提取圖像的尺寸和通道, 用于將opencv下的image轉(zhuǎn)換成Qimage
height, width, channel = self.img4.shape
bytesPerLine = 3 * width
self.qImg4 = QImage(self.img4.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_6.setPixmap(QPixmap.fromImage( self.qImg4))
def ccd1(self):
self.cap.set(3, 640)
self.cap.set(4, 480)
ret, self.img = self.cap.read()
self.refreshShowa()
# 啟動另一個線程
self.work0.start()#注意一致性
def ccd2(self, str):
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1 = self.cap1.read()
self.refreshShowb()
self.work.start()#注意一致性
def ccd3(self, str):
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2= self.cap2.read()
self.refreshShowc()
self.work2.start()#注意一致性
def ccd4(self, str):
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3 = self.cap3.read()
self.refreshShowd()
self.work3.start()#注意一致性
def ccdmerge(self, str):
self.img4=np.hstack((self.img, self.img1))
self.img4=np.vstack((self.img4, np.hstack((self.img2, self.img3))))
#print ('here is a merge process') 可以用來判斷多線程的執(zhí)行
self.refreshShowe() #later to remove the remark
self.work4.start()#注意一致性
def savemergeimage(self):
# 調(diào)用存儲文件dialog
fileName, tmp = QFileDialog.getSaveFileName(
self, 'Save Image', './__data', '*.png *.jpg *.bmp', '*.png')
if fileName == '':
return
if self.img.size == 1:
return
# 調(diào)用opencv寫入圖像
cv.imwrite(fileName,self.img4)
class WorkThread(QThread): #多線程核心,非常重要
# 定義一個信號
trigger = pyqtSignal(str)
def __int__(self):
# 初始化函數(shù),默認(rèn)
super(WorkThread, self).__init__()
def run(self):
self.trigger.emit('')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
import turtle
def getPosition(x, y):
turtle.setx(x)
turtle.sety(y)
print(x, y)
class Pikachu:
def __init__(self):
self.t = turtle.Turtle()
t = self.t
t.pensize(3)
t.speed(9)
t.ondrag(getPosition)
def noTrace_goto(self, x, y):
self.t.penup()
self.t.goto(x, y)
self.t.pendown()
def leftEye(self, x, y):
self.noTrace_goto(x, y)
t = self.t
t.seth(0)
t.fillcolor('#333333')
t.begin_fill()
t.circle(22)
t.end_fill()
self.noTrace_goto(x, y+10)
t.fillcolor('#000000')
t.begin_fill()
t.circle(10)
t.end_fill()
self.noTrace_goto(x+6, y + 22)
t.fillcolor('#ffffff')
t.begin_fill()
t.circle(10)
t.end_fill()
def rightEye(self, x, y):
self.noTrace_goto(x, y)
t = self.t
t.seth(0)
t.fillcolor('#333333')
t.begin_fill()
t.circle(22)
t.end_fill()
self.noTrace_goto(x, y+10)
t.fillcolor('#000000')
t.begin_fill()
t.circle(10)
t.end_fill()
self.noTrace_goto(x-6, y + 22)
t.fillcolor('#ffffff')
t.begin_fill()
t.circle(10)
t.end_fill()
def mouth(self, x, y):
self.noTrace_goto(x, y)
t = self.t
t.fillcolor('#88141D')
t.begin_fill()
# 下嘴唇
l1 = []
l2 = []
t.seth(190)
a = 0.7
for i in range(28):
a += 0.1
t.right(3)
t.fd(a)
l1.append(t.position())
self.noTrace_goto(x, y)
t.seth(10)
a = 0.7
for i in range(28):
a += 0.1
t.left(3)
t.fd(a)
l2.append(t.position())
# 上嘴唇
t.seth(10)
t.circle(50, 15)
t.left(180)
t.circle(-50, 15)
t.circle(-50, 40)
t.seth(233)
t.circle(-50, 55)
t.left(180)
t.circle(50, 12.1)
t.end_fill()
# 舌頭
self.noTrace_goto(17, 54)
t.fillcolor('#DD716F')
t.begin_fill()
t.seth(145)
t.circle(40, 86)
t.penup()
for pos in reversed(l1[:20]):
t.goto(pos[0], pos[1]+1.5)
for pos in l2[:20]:
t.goto(pos[0], pos[1]+1.5)
t.pendown()
t.end_fill()
# 鼻子
self.noTrace_goto(-17, 94)
t.seth(8)
t.fd(4)
t.back(8)
# 紅臉頰
def leftCheek(self, x, y):
turtle.tracer(False)
t = self.t
self.noTrace_goto(x, y)
t.seth(300)
t.fillcolor('#DD4D28')
t.begin_fill()
a = 2.3
for i in range(120):
if 0 = i 30 or 60 = i 90:
a -= 0.05
t.lt(3)
t.fd(a)
else:
a += 0.05
t.lt(3)
t.fd(a)
t.end_fill()
turtle.tracer(True)
def rightCheek(self, x, y):
t = self.t
turtle.tracer(False)
self.noTrace_goto(x, y)
t.seth(60)
t.fillcolor('#DD4D28')
t.begin_fill()
a = 2.3
for i in range(120):
if 0 = i 30 or 60 = i 90:
a -= 0.05
t.lt(3)
t.fd(a)
else:
a += 0.05
t.lt(3)
t.fd(a)
t.end_fill()
turtle.tracer(True)
def colorLeftEar(self, x, y):
t = self.t
self.noTrace_goto(x, y)
t.fillcolor('#000000')
t.begin_fill()
t.seth(330)
t.circle(100, 35)
t.seth(219)
t.circle(-300, 19)
t.seth(110)
t.circle(-30, 50)
t.circle(-300, 10)
t.end_fill()
def colorRightEar(self, x, y):
t = self.t
self.noTrace_goto(x, y)
t.fillcolor('#000000')
t.begin_fill()
t.seth(300)
t.circle(-100, 30)
t.seth(35)
t.circle(300, 15)
t.circle(30, 50)
t.seth(190)
t.circle(300, 17)
t.end_fill()
def body(self):
t = self.t
t.fillcolor('#F6D02F')
t.begin_fill()
# 右臉輪廓
t.penup()
t.circle(130, 40)
t.pendown()
t.circle(100, 105)
t.left(180)
t.circle(-100, 5)
# 右耳朵
t.seth(20)
t.circle(300, 30)
t.circle(30, 50)
t.seth(190)
t.circle(300, 36)
# 上輪廓
t.seth(150)
t.circle(150, 70)
# 左耳朵
t.seth(200)
t.circle(300, 40)
t.circle(30, 50)
t.seth(20)
t.circle(300, 35)
#print(t.pos())
# 左臉輪廓
t.seth(240)
t.circle(105, 95)
t.left(180)
t.circle(-105, 5)
# 左手
t.seth(210)
t.circle(500, 18)
t.seth(200)
t.fd(10)
t.seth(280)
t.fd(7)
t.seth(210)
t.fd(10)
t.seth(300)
t.circle(10, 80)
t.seth(220)
t.fd(10)
t.seth(300)
t.circle(10, 80)
t.seth(240)
t.fd(12)
t.seth(0)
t.fd(13)
t.seth(240)
t.circle(10, 70)
t.seth(10)
t.circle(10, 70)
t.seth(10)
t.circle(300, 18)
t.seth(75)
t.circle(500, 8)
t.left(180)
t.circle(-500, 15)
t.seth(250)
t.circle(100, 65)
# 左腳
t.seth(320)
t.circle(100, 5)
t.left(180)
t.circle(-100, 5)
t.seth(220)
t.circle(200, 20)
t.circle(20, 70)
t.seth(60)
t.circle(-100, 20)
t.left(180)
t.circle(100, 20)
t.seth(300)
t.circle(10, 70)
t.seth(60)
t.circle(-100, 20)
t.left(180)
t.circle(100, 20)
t.seth(10)
t.circle(100, 60)
# 橫向
t.seth(180)
t.circle(-100, 10)
t.left(180)
t.circle(100, 10)
t.seth(5)
t.circle(100, 10)
t.circle(-100, 40)
t.circle(100, 35)
t.left(180)
t.circle(-100, 10)
# 右腳
t.seth(290)
t.circle(100, 55)
t.circle(10, 50)
t.seth(120)
t.circle(100, 20)
t.left(180)
t.circle(-100, 20)
t.seth(0)
t.circle(10, 50)
t.seth(110)
t.circle(100, 20)
t.left(180)
t.circle(-100, 20)
t.seth(30)
t.circle(20, 50)
t.seth(100)
t.circle(100, 40)
# 右側(cè)身體輪廓
t.seth(200)
t.circle(-100, 5)
t.left(180)
t.circle(100, 5)
t.left(30)
t.circle(100, 75)
t.right(15)
t.circle(-300, 21)
t.left(180)
t.circle(300, 3)
# 右手
t.seth(43)
t.circle(200, 60)
t.right(10)
t.fd(10)
t.circle(5, 160)
t.seth(90)
t.circle(5, 160)
t.seth(90)
t.fd(10)
t.seth(90)
t.circle(5, 180)
t.fd(10)
t.left(180)
t.left(20)
t.fd(10)
t.circle(5, 170)
t.fd(10)
t.seth(240)
t.circle(50, 30)
t.end_fill()
self.noTrace_goto(130, 125)
t.seth(-20)
t.fd(5)
t.circle(-5, 160)
t.fd(5)
# 手指紋
self.noTrace_goto(166, 130)
t.seth(-90)
t.fd(3)
t.circle(-4, 180)
t.fd(3)
t.seth(-90)
t.fd(3)
t.circle(-4, 180)
t.fd(3)
# 尾巴
self.noTrace_goto(168, 134)
t.fillcolor('#F6D02F')
t.begin_fill()
t.seth(40)
t.fd(200)
t.seth(-80)
t.fd(150)
t.seth(210)
t.fd(150)
t.left(90)
t.fd(100)
t.right(95)
t.fd(100)
t.left(110)
t.fd(70)
t.right(110)
t.fd(80)
t.left(110)
t.fd(30)
t.right(110)
t.fd(32)
t.right(106)
t.circle(100, 25)
t.right(15)
t.circle(-300, 2)
##############
#print(t.pos())
t.seth(30)
t.fd(40)
t.left(100)
t.fd(70)
t.right(100)
t.fd(80)
t.left(100)
t.fd(46)
t.seth(66)
t.circle(200, 38)
t.right(10)
t.fd(10)
t.end_fill()
# 尾巴花紋
t.fillcolor('#923E24')
self.noTrace_goto(126.82, -156.84)
t.begin_fill()
t.seth(30)
t.fd(40)
t.left(100)
t.fd(40)
t.pencolor('#923e24')
t.seth(-30)
t.fd(30)
t.left(140)
t.fd(20)
t.right(150)
t.fd(20)
t.left(150)
t.fd(20)
t.right(150)
t.fd(20)
t.left(130)
t.fd(18)
t.pencolor('#000000')
t.seth(-45)
t.fd(67)
t.right(110)
t.fd(80)
t.left(110)
t.fd(30)
t.right(110)
t.fd(32)
t.right(106)
t.circle(100, 25)
t.right(15)
t.circle(-300, 2)
t.end_fill()
# 帽子、眼睛、嘴巴、臉頰
self.cap(-134.07, 147.81)
self.mouth(-5, 25)
self.leftCheek(-126, 32)
self.rightCheek(107, 63)
self.colorLeftEar(-250, 100)
self.colorRightEar(140, 270)
self.leftEye(-85, 90)
self.rightEye(50, 110)
t.hideturtle()
def cap(self, x, y):
self.noTrace_goto(x, y)
t = self.t
t.fillcolor('#CD0000')
t.begin_fill()
t.seth(200)
t.circle(400, 7)
t.left(180)
t.circle(-400, 30)
t.circle(30, 60)
t.fd(50)
t.circle(30, 45)
t.fd(60)
t.left(5)
t.circle(30, 70)
t.right(20)
t.circle(200, 70)
t.circle(30, 60)
t.fd(70)
# print(t.pos())
t.right(35)
t.fd(50)
t.circle(8, 100)
t.end_fill()
self.noTrace_goto(-168.47, 185.52)
t.seth(36)
t.circle(-270, 54)
t.left(180)
t.circle(270, 27)
t.circle(-80, 98)
t.fillcolor('#444444')
t.begin_fill()
t.left(180)
t.circle(80, 197)
t.left(58)
t.circle(200, 45)
t.end_fill()
self.noTrace_goto(-58, 270)
t.pencolor('#228B22')
t.dot(35)
self.noTrace_goto(-30, 280)
t.fillcolor('#228B22')
t.begin_fill()
t.seth(100)
t.circle(30, 180)
t.seth(190)
t.fd(15)
t.seth(100)
t.circle(-45, 180)
t.right(90)
t.fd(15)
t.end_fill()
t.pencolor('#000000')
def start(self):
self.body()
def main():
print('Painting the Pikachu... ')
turtle.screensize(800, 600)
turtle.title('Pikachu')
pikachu = Pikachu()
pikachu.start()
turtle.mainloop()
if __name__ == '__main__':
main()
標(biāo)題名稱:python中cap函數(shù),pythoncmp函數(shù)
標(biāo)題鏈接:http://m.rwnh.cn/article34/phpcse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、移動網(wǎng)站建設(shè)、云服務(wù)器、定制開發(fā)、網(wǎng)站營銷、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)