python学习笔记第6节-几个例程

    python 还有很多的功能和特色在这里并没有涉及,比如类和函数的高级用法,进程和线程,io,异常处理、库、程序界面设计、程序打包和发布等,数据结构方面的栈,队列,链表,图,网络等,算法方面也没有涉及,不是这些知识不重要,而是对于初学者而言,系统的掌握最核心的基础知识更为紧迫,在某个方面钻的太深不利于入门。

      掌握基本的数据类型,才是重中之重,学会用基本的数据类型表达问题,在经过简单的步骤达到编程的目的,会大大加强学习的信心和效率。如何把数据结构的知识,与切片,计算,循环,函数,和类融为一体?只有通过多练习,多实验,多思考,多验证,多搜索,多借鉴,多总结来实现。

      python 拥有十分庞大的知识体系,基本语法,基本的思想是一致的。入门python编程是一项艰苦的工作,前进的道路上会遇到各种问题,各种报错,各种表达上的结结巴巴,思路上的茫然。兴趣是最好的老师,我本人之前也是对python一窍不通的,为了解决视觉定位问题,开始学习opencv库,尝试神经网络,学习cnc,plc 等工控知识。一路下来发现所用的方案都可以包含在python 的体系里,我发现一套可行的方案并不需要所有的知识,理解基本数据类型,理解数据切片,理解程序控制就完全能够读懂别人的方案,并加以修改实现自己的目标。

      确定方向,确定目标太重要了。

       python 如果是一个超市,假如你决定包一顿饺子,你只需要购买大肉,生葱,少许青菜和饺子皮就够了,而其他的你并不需要了解太多。事实上,python不是超市,python是一座大城市,里面有各种各样的市场和超市。

      github 上有很多和你有共同兴趣的人,也有丰富的代码资源,借鉴他们的经验或许能让你进步更快。

      我希望有更多用代码和实验思考的人,这些人改造了时代,改造了人们对未来的想象。

文末附上几个有趣的例程,不一定能通过调试,希望为你的入门增加一些兴趣。

**********没有界面的电子琴***********

import pygame

def window_init():

    pygame.init()

    pygame.mixer.init()

    screen = pygame.display.set_mode((800, 800))

    pygame.display.set_caption('keyboardpiano')

window_init()

tone_1 = pygame.mixer.Sound('1.wav')

tone_2 = pygame.mixer.Sound('2.wav')

tone_3 = pygame.mixer.Sound('3.wav')

tone_4 = pygame.mixer.Sound('4.wav')

tone_5 = pygame.mixer.Sound('5.wav')

tone_6 = pygame.mixer.Sound('6.wav')

tone_7 = pygame.mixer.Sound('7.wav')

tone_8 = pygame.mixer.Sound('8.wav')

tone_9 = pygame.mixer.Sound('9.wav')

tone_10 = pygame.mixer.Sound('10.wav')

tone_11 = pygame.mixer.Sound('11.wav')

tone_12 = pygame.mixer.Sound('12.wav')

tone_13 = pygame.mixer.Sound('13.wav')

tone_14 = pygame.mixer.Sound('14.wav')

tone_15 = pygame.mixer.Sound('15.wav')

tone_16 = pygame.mixer.Sound('16.wav')

tone_17 = pygame.mixer.Sound('17.wav')

tone_18 = pygame.mixer.Sound('18.wav')

tone_19 = pygame.mixer.Sound('19.wav')

tone_20 = pygame.mixer.Sound('20.wav')

tone_21 = pygame.mixer.Sound('21.wav')

tone_22 = pygame.mixer.Sound('22.wav')

tone_23 = pygame.mixer.Sound('23.wav')

def k_control():

    while True:

        print('true')

        for event in pygame.event.get():

            print('event in?')

            if event.type == pygame.QUIT:

                pygame.quit()

            elif event.type == pygame.KEYDOWN:

                print('key down?')

                if event.key == pygame.K_q:

                    tone_1.play()

                elif event.key == pygame.K_a:

                    tone_2.play()

                elif event.key == pygame.K_z:

                    tone_3.play()

                elif event.key == pygame.K_w:

                    tone_4.play()

                elif event.key == pygame.K_s:

                    tone_5.play()

                elif event.key == pygame.K_x:

                    tone_6.play()

                elif event.key == pygame.K_e:

                    tone_7.play()

                elif event.key == pygame.K_d:

                    tone_8.play()

                elif event.key == pygame.K_c:

                    tone_9.play()

                elif event.key == pygame.K_r:

                    tone_10.play()

                elif event.key == pygame.K_f:

                    tone_11.play()

                elif event.key == pygame.K_v:

                    tone_12.play()

                elif event.key == pygame.K_t:

                    tone_13.play()

                elif event.key == pygame.K_g:

                    tone_14.play()

                elif event.key == pygame.K_b:

                    tone_15.play()

                elif event.key == pygame.K_y:

                    tone_16.play()

                elif event.key == pygame.K_h:

                    tone_17.play()

                elif event.key == pygame.K_n:

                    tone_18.play()

                elif event.key == pygame.K_u:

                    tone_19.play()

                elif event.key == pygame.K_j:

                    tone_20.play()

                elif event.key == pygame.K_m:

                    tone_21.play()

                elif event.key == pygame.K_i:

                    tone_22.play()

                elif event.key == pygame.K_k:

                    tone_23.play()

        pygame.display.update()

def main():

    k_control()

if __name__ == '__main__':

    main()

声音文件的下载地址:链接:https://pan.baidu.com/s/1V6N-wnU9n3t3UuohlhYynw?pwd=q6ff

提取码:q6ff


**********用python 读gcode 文件通过串口控制3d打印机***********


import serial

from timeimport sleep

import re

#ser = serial.Serial('/dev/ttyACM11', 250000, timeout=0.1)  # 打开USB0口 串口号ttyACM0 波特率115200 超时2秒

ser = serial.Serial('COM11', 250000, 8, 'N', 1)      #这个串口编号和波特率要与机器匹配

flag = ser.is_open

if flag:

print('成功打开串口\n')

#ser.close()

else:

print('Open Error\n')

#ser.close()

ser.timeout =40  # 读超时设置

ser.writeTimeout =2  # 写超时

'''

line = '$G\n'  # 查看信息命令print(line)  # 打印命令数据cmd = line.encode()  # 对数据unicode编码成bytes

ser.write(cmd)  # 发送命令data = ser.readline()  # 读取返回数据 10s超时print(data)  # 打印返回数据'''

f =open("D:/pythonlianxi1/image/5555.gcode", 'r')# 只读模式打开文档打开Gcode文档,

#couter = 0

while True:

line = f.readline()# 按行读取

    if not line:# 读到最后文档结尾

        f.close()# 关闭文档

        break  # 退出循环

    print("文件行:",line)# 打印数据

    cmd = line.encode()# 对数据unicode编码成bytes

    ser.write(cmd)# 发送命令

    data = ser.readline()# 读取返回数据 10s超时

    print("打印机返回",data)# 打印返回数据

    print('发送完成')

#couter = couter + 1

#sleep(0.2)

ser.close()


*********运用opencv 方法寻找图像元素中心点的坐标************


import cv2 as cv

import numpy as np

def measure_object(image):

    image2 = cv.resize(image, (180, 180), interpolation=cv.INTER_AREA)

    gray = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)

    ret, binary = cv.threshold(gray, 100, 255, cv.THRESH_BINARY_INV)

    cv.namedWindow("2zhi", cv.WINDOW_AUTOSIZE)

    cv.imshow("2zhi", binary)

    #dst = cv.cvtColor(binary, cv.COLOR_GRAY2BGR)

    contours, hireachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

    j = 0

    for  contour in enumerate(contours):

        j = j + 1

    zhongxindian = [[0 for i in range(2)] for i in range(j)]

    for i, contour in enumerate(contours):

        area = cv.contourArea(contour)

        print(f'面积{i + 1}是:{area}')

        x, y, w, h = cv.boundingRect(contour)

        rate = min(w, h)/max(w, h)

        mm = cv.moments(contour)

        if mm['m00'] != 0:

            cx = mm['m10']/mm['m00']

            cy = mm['m01']/mm['m00']

        else:

            cx = x-h/2

            cy = y+w/2

        ccx = np.int(cx)

        ccy = np.int(cy)

        zhongxindian[i][0] = ccx

        zhongxindian[i][1] = ccy

    #print("中心点集合:", zhongxindian)

    return zhongxindian

src = cv.imread("D:/vcprojects/images/sanjiaodian.jpg")     #图像元素不要太多

#cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)

#cv.imshow("input image", src)

dj = measure_object(src)

print(dj)

cv.waitKey(0)

cv.destroyAllWindows()


********图片探针*********


import cv2 as cv

import numpy as np

# 定义标注函数,判断图片小片是否为目标物体

def Bz(imagesmall):

    k = imagesmall    #imagesmall在主程序中已经二值化

    tanzhen = 0

    jifen = 0

    biaozhu = False

    # 小片视为5*5的宫格,这里取最中间的一块进行判断:左上角开始,沿对角线取10个点,有四个为目标颜色即标注为true,最好是连续的目标            点todo

    for i in range(5):

        jifen = k[i][i]/255

        tanzhen+=jifen       #如果这个点上的颜色非黑色则计入积分

    if tanzhen >=2:

        biaozhu = True

    else :

        biaozhu = False

    return biaozhu

src = cv.imread('wu.png',1)

# cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)

# cv.imshow("input image", src)

dim = (200,200)

src = cv.resize(src, dim, interpolation = cv.INTER_AREA)

gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)

ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)

# cv.namedWindow("erzhi image", cv.WINDOW_AUTOSIZE)

# cv.imshow("erzhi image", binary)

cw = 5

ch = 5

h,w = binary.shape[:2]

for row in range(0,h,ch):

    for col in range(0,w,cw):

        roi = binary[row:row+ch,col:col+cw]

        #print(roi.size)

        jieguo = Bz(roi)

        if jieguo == True:

            strings = ' '

        else:

            strings = '@'

        #print('%s,%s标注:%s'%row%col%string)

        print(strings,end=' ')

    print('')

cv.waitKey(0)

cv.destroyAllWindows()

原图


结果

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容