chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用OpenCV-Python圖形圖像處理制作出雪花飄落特效詳解

新機(jī)器視覺(jué) ? 來(lái)源:CSDN技術(shù)社區(qū) ? 作者:LaoYuanPython ? 2021-04-14 14:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

效果展示

首先看一下目標(biāo)效果:

素材準(zhǔn)備 & 思路分析

本次雪花來(lái)源于如下圖片

背景可以是任意圖片,下面是老猿在網(wǎng)上找到的一張珠峰圖像

珠峰背景的天空飄落著紛紛揚(yáng)揚(yáng)的雪花,意境不錯(cuò)吧?

實(shí)現(xiàn)思路

要實(shí)現(xiàn)雪花飄落,單張圖片的單次顯示肯定不夠,需要不停循環(huán)顯示圖片,并且在每次圖片顯示時(shí),生成新的雪花并更新圖片中已有雪花的位置,這就需要將圖片中每個(gè)雪花的位置精確管理。

自然界的雪花大小是不同的,因此為了提升逼真效果,還需要使得雪花大小在一定范圍內(nèi)隨機(jī)變化和旋轉(zhuǎn)。

不停產(chǎn)生大小不同的雪花,如果每次產(chǎn)生雪花都對(duì)雪花進(jìn)行變換其實(shí)浪費(fèi)了系統(tǒng)的資源,因此為了提升處理性能,只在程序開(kāi)始初始化時(shí)一次批量生產(chǎn)各種不同大小、不同旋轉(zhuǎn)角度的各種雪花,后續(xù)程序生成雪花時(shí),直接從批量生成的雪花中取一個(gè)作為要生成的雪花,而不用每次從基本的雪花圖像開(kāi)始進(jìn)行變換。

關(guān)鍵實(shí)現(xiàn)代碼

1、生成各種雪花形狀

def initSnowShapes(): “”“ 從文件中讀入雪花圖片,并進(jìn)行不同尺度的縮小和不同角度的旋轉(zhuǎn)從而生成不同的雪花形狀,這些雪花形狀保存到全局列表中snowShapesList ”“” global snowShapesList imgSnow = readImgFile(r‘f:picsnow.jpg’) imgSnow = cv2.resize(imgSnow, None, fx=0.2, fy=0.2) #圖片文件中的雪花比較大,需要縮小才能象自然的雪花形象 minFactor,maxFactor = 50,100 #雪花大小在imgSnow的0.5-1倍之間變化

for factor in range(minFactor,maxFactor,5): #每次增加5%大小 f = factor*0.01 imgSnowSize = cv2.resize(imgSnow, None, fx=f, fy=f) for ange in range(0,360,5):#雪花0-360之間旋轉(zhuǎn) imgRotate = rotationImg(imgSnowSize,ange) snowShapesList.append(imgRotate)

2、產(chǎn)生一排雪花

def generateOneRowSnows(width,count): “”“ 產(chǎn)生一排雪花對(duì)象,每個(gè)雪花隨機(jī)從snowShapesList取一個(gè)、橫坐標(biāo)位置隨機(jī)、縱坐標(biāo)初始為0 :param width: 背景圖像寬度 :param count: 希望的雪花數(shù) 一個(gè)包含產(chǎn)生的多個(gè)雪花對(duì)象信息的列表,每個(gè)列表的元素代表一個(gè)雪花對(duì)象,雪花對(duì)象包含三個(gè)信息,在snowShapesList的索引號(hào)、初始x坐標(biāo)、初始y坐標(biāo)(才生成固定為0) ”“” global snowShapesList line = [] picCount = len(snowShapesList) for loop in range(count): imgId = random.randint(0,picCount-1) xPos = random.randint(0,width-1) line.append((imgId,xPos,0)) return line

3、將所有雪花對(duì)象融合到背景圖像

def putSnowObjectToImg(img): “”“ 將所有snowObjects中的雪花對(duì)象融合放到圖像img中,融合時(shí)y坐標(biāo)隨機(jī)下移一定高度,x坐標(biāo)左右隨機(jī)小范圍內(nèi)移動(dòng) ”“” global snowShapesList,snowObjects horizontalMaxDistance,verticalMaxDistance = 5,20 #水平方向左右漂移最大值和豎直方向下落最大值 snowObjectCount = len(snowObjects) rows,cols = img.shape[0:2] imgResult = np.array(img) for index in range(snowObjectCount-1,-1,-1): imgObj = snowObjects[index] #每個(gè)元素為(imgId,x,y) if imgObj[2]》rows: #如果雪花的起始縱坐標(biāo)已經(jīng)超出背景圖像的高度(即到達(dá)背景圖像底部),則該雪花對(duì)象需進(jìn)行失效處理 del(snowObjects[index]) else: imgSnow = snowShapesList[imgObj[0]] x,y = imgObj[1:] #取該雪花上次的位置 x = x+random.randint(-1*horizontalMaxDistance,horizontalMaxDistance) #橫坐標(biāo)隨機(jī)左右移動(dòng)一定范圍 y = y+random.randint(1,verticalMaxDistance) #縱坐標(biāo)隨機(jī)下落一定范圍 snowObjects[index] = (imgObj[0],x,y) #更新雪花對(duì)象信息 imgResult = addImgToLargeImg(imgSnow,imgResult,(x,y),180) #將所有雪花對(duì)象圖像按照其位置融合到背景圖像中 return imgResult #返回融合圖像

4、主函數(shù)

主函數(shù)讀入背景圖片,初始化雪花形狀列表,然后循環(huán)自頂部產(chǎn)生一排新的雪花,并將所有雪花對(duì)象動(dòng)態(tài)調(diào)整位置后融合到背景圖像,每200毫秒循環(huán)一次,直至按ESC退出。

def main(): global snowShapesList,snowObjects bg = readImgFile(r‘f:picQomolangma2.jpg’) initSnowShapes() rows,cols = bg.shape[:2] maxObjsPerRow = int(cols/100)

while(True): snowObjects += generateOneRowSnows(cols,random.randint(0,maxObjsPerRow)) result = putSnowObjectToImg(bg) cv2.imshow(‘result’,result) ch = cv2.waitKey(200) if ch==27:break

主程序完整代碼及雪花飄落效果

5.1、 主程序完整代碼

# -*- coding: utf-8 -*-import cv2,randomimport numpy as np

from opencvPublic import addImgToLargeImg,readImgFile,rotationImgsnowShapesList = [] #雪花形狀列表snowObjects=[] #圖片中要顯示的所有雪花對(duì)象

def initSnowShapes(): “”“ 從文件中讀入雪花圖片,并進(jìn)行不同尺度的縮小和不同角度的旋轉(zhuǎn)從而生成不同的雪花形狀,這些雪花形狀保存到全局列表中snowShapesList ”“” global snowShapesList imgSnow = readImgFile(r‘f:picsnow.jpg’) imgSnow = cv2.resize(imgSnow, None, fx=0.2, fy=0.2) #圖片文件中的雪花比較大,需要縮小才能象自然的雪花形象 minFactor,maxFactor = 50,100 #雪花大小在imgSnow的0.5-1倍之間變化

for factor in range(minFactor,maxFactor,5): #每次增加5%大小 f = factor*0.01 imgSnowSize = cv2.resize(imgSnow, None, fx=f, fy=f) for ange in range(0,360,5):#雪花0-360之間旋轉(zhuǎn),每次旋轉(zhuǎn)角度增加5° imgRotate = rotationImg(imgSnowSize,ange) snowShapesList.append(imgRotate)

def generateOneRowSnows(width,count): “”“ 產(chǎn)生一排雪花對(duì)象,每個(gè)雪花隨機(jī)從snowShapesList取一個(gè)、橫坐標(biāo)位置隨機(jī)、縱坐標(biāo)初始為0 :param width: 背景圖像寬度 :param count: 希望的雪花數(shù) 當(dāng)前行對(duì)應(yīng)的豎直坐標(biāo) 一個(gè)包含產(chǎn)生的多個(gè)雪花對(duì)象信息的列表,每個(gè)列表的元素代表一個(gè)雪花對(duì)象,雪花對(duì)象包含三個(gè)信息,在snowShapesList的索引號(hào)、初始x坐標(biāo)、初始y坐標(biāo)(才生成固定為0) ”“” global snowShapesList line = [] picCount = len(snowShapesList) for loop in range(count): imgId = random.randint(0,picCount-1) xPos = random.randint(0,width-1) line.append((imgId,xPos,0)) return line

def putSnowObjectToImg(img): “”“ 將所有snowObjects中的雪花對(duì)象融合放到圖像img中,融合時(shí)y坐標(biāo)隨機(jī)下移一定高度,x坐標(biāo)左右隨機(jī)小范圍內(nèi)移動(dòng) ”“” global snowShapesList,snowObjects horizontalMaxDistance,verticalMaxDistance = 5,20 #水平方向左右漂移最大值和豎直方向下落最大值 snowObjectCount = len(snowObjects) rows,cols = img.shape[0:2] imgResult = np.array(img) for index in range(snowObjectCount-1,-1,-1): imgObj = snowObjects[index] #每個(gè)元素為(imgId,x,y) if imgObj[2]》rows: #如果雪花的起始縱坐標(biāo)已經(jīng)超出背景圖像的高度(即到達(dá)背景圖像底部),則該雪花對(duì)象需進(jìn)行失效處理 del(snowObjects[index]) else: imgSnow = snowShapesList[imgObj[0]] x,y = imgObj[1:] #取該雪花上次的位置 x = x+random.randint(-1*horizontalMaxDistance,horizontalMaxDistance) #橫坐標(biāo)隨機(jī)左右移動(dòng)一定范圍 y = y+random.randint(1,verticalMaxDistance) #縱坐標(biāo)隨機(jī)下落一定范圍 snowObjects[index] = (imgObj[0],x,y) #更新雪花對(duì)象信息 imgResult = addImgToLargeImg(imgSnow,imgResult,(x,y),180) #將所有雪花對(duì)象圖像按照其位置融合到背景圖像中 return imgResult #返回融合圖像

def main(): global snowShapesList,snowObjects

initSnowShapes() bg = readImgFile(r‘f:picQomolangma2.jpg’) rows,cols = bg.shape[:2] maxObjsPerRow = int(cols/100)

while(True): snowObjects += generateOneRowSnows(cols,random.randint(0,maxObjsPerRow)) result = putSnowObjectToImg(bg) cv2.imshow(‘result’,result) ch = cv2.waitKey(200) if ch==27:break

main()

總結(jié)

本文介紹了通過(guò)OpenCV-Python以特定圖像為背景制作雪花飄落特效的實(shí)現(xiàn)思路、關(guān)鍵函數(shù)功能以及主程序的完整代碼。雪花飄落特效實(shí)際上屬于圖像融合的操作,只要掌握?qǐng)D像融合的基礎(chǔ)知識(shí)以及設(shè)計(jì)后實(shí)現(xiàn)思路,實(shí)現(xiàn)起來(lái)還是比較快的,效果也挺不錯(cuò)。結(jié)合上面代碼,大家還可以調(diào)整雪花的大小以及飄雪的密集程度。

以上實(shí)現(xiàn)過(guò)程需要注意:

1、雪花圖片一般會(huì)比圖片需要的效果大,怎么縮小到合適的大小需要多試一下,下面是才開(kāi)始將原始圖片只縮寫(xiě)一半之后的效果。

可以看到該效果就不太讓人滿(mǎn)意。

2、控制好雪花左右移動(dòng)以及下落的速度和幅度,太快、太慢以及幅度過(guò)大或過(guò)小都不太象在雪花飄落。
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

    45090
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4885

    瀏覽量

    90307

原文標(biāo)題:OpenCV-Python圖形圖像處理:制作雪花飄落特效

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【幸狐Omni3576邊緣計(jì)算套件試用體驗(yàn)】YOLO26 板端部署

    Type-C 供電; OpenCV 安裝 OpenCV 是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)庫(kù),廣泛應(yīng)用于圖像處理、視頻分析和機(jī)器學(xué)習(xí)等領(lǐng)域。 為了避免影響系統(tǒng)
    發(fā)表于 04-19 22:02

    【上海晶珩睿莓 1 開(kāi)發(fā)板試用體驗(yàn)】車(chē)牌識(shí)別

    。 硬件連接 連接 WiFi 實(shí)現(xiàn)無(wú)線(xiàn)網(wǎng)絡(luò)通信; 使用 Micro-USB 數(shù)據(jù)線(xiàn)實(shí)現(xiàn)設(shè)備供電; OpenCV 安裝 OpenCV 是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)庫(kù),廣泛應(yīng)用于圖像處理、視頻
    發(fā)表于 01-02 20:53

    沒(méi)有專(zhuān)利的opencv-python 版本

    ) 視頻處理 視頻讀取/寫(xiě)入、幀提取、運(yùn)動(dòng)檢測(cè)(背景差分) 繪圖功能 畫(huà)直線(xiàn)/矩形/圓、添加文字、標(biāo)注關(guān)鍵點(diǎn) 關(guān)鍵總結(jié): 對(duì) Python 3.13 來(lái)說(shuō),最優(yōu)選擇是安裝 opencv-python
    發(fā)表于 12-13 12:37

    那些年我用OpenCV+Qt趟過(guò)哪些坑?寫(xiě)給視覺(jué)應(yīng)用開(kāi)發(fā)者的避坑指南

    前陣子,團(tuán)隊(duì)里新來(lái)的小伙子跑來(lái)找我,眉頭緊鎖。他手里的項(xiàng)目我清楚:一個(gè)基于攝像頭的簡(jiǎn)單計(jì)數(shù)工具。Demo階段用Python+OpenCV,幾行代碼跑得飛快,準(zhǔn)確率也好看。可一旦要打包成給產(chǎn)線(xiàn)工人用
    發(fā)表于 12-02 09:43

    【創(chuàng)龍TL3562-MiniEVM開(kāi)發(fā)板試用體驗(yàn)】問(wèn)題4 ubuntu鏡像,opencv不能正常工作??

    /simple --trusted-host mirrors.aliyun.com opencv-python 示例代碼 import cv2 # 初始化攝像頭對(duì)象,0通常是默認(rèn)的攝像頭索引 #cap
    發(fā)表于 08-11 22:17

    【GM-3568JHF開(kāi)發(fā)板免費(fèi)體驗(yàn)】OpenCV開(kāi)發(fā)環(huán)境安裝和計(jì)數(shù)程序開(kāi)發(fā)

    查看ip SSH鏈接 遠(yuǎn)程登錄賬號(hào)和密碼是linaro 二、安裝Pip管理工具 Sudo apt-get install python3-pip 三、安裝cv2環(huán)境 cv2支持圖像處理(如濾波、邊緣
    發(fā)表于 08-09 13:30

    如何板端編譯OpenCV并搭建應(yīng)用--基于瑞芯微米爾RK3576開(kāi)發(fā)板

    INSTALL_PYTHON_EXAMPLES=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/myir/Downloads
    發(fā)表于 08-08 17:14

    飛騰主板上的芯片組X100能起到什么作用?

    飛騰主板上的芯片組X100作為飛騰處理器的重要配套芯片,在計(jì)算機(jī)系統(tǒng)中承擔(dān)著多元且關(guān)鍵的作用,主要體現(xiàn)在圖形圖像處理與接口擴(kuò)展兩大核心功能領(lǐng)域。
    的頭像 發(fā)表于 07-28 09:25 ?806次閱讀

    國(guó)產(chǎn)化板卡設(shè)計(jì)資料:2270-VC709E 基于FMC接口的JFM7VX690T36 PCIeX8 接口卡

    JFM7K325T板卡, 國(guó)產(chǎn)化板卡, 軟件無(wú)線(xiàn)電處理平臺(tái), 圖形圖像硬件加速器, JFM7VX690T板卡
    的頭像 發(fā)表于 07-17 09:25 ?616次閱讀
    國(guó)產(chǎn)化板卡設(shè)計(jì)資料:2270-VC709E 基于FMC接口的JFM7VX690T36 PCIeX8 接口卡

    【Milk-V Duo S 開(kāi)發(fā)板免費(fèi)體驗(yàn)】SDK編譯、人臉檢測(cè)、OpenCV測(cè)試

    -mobile-test ./opencv-mobile-test 生成 200x200 尺寸的 out.jpg 圖像,即實(shí)現(xiàn)圖片壓縮。 該測(cè)試工程可結(jié)合物體識(shí)別模型,實(shí)現(xiàn)輸入圖像的尺寸調(diào)整,為之后的推理和
    發(fā)表于 07-11 13:48

    【正點(diǎn)原子STM32MP257開(kāi)發(fā)板試用】2.USB攝像頭使用

    ) (usb-482f0000.usb-1.3): /dev/video7 /dev/video8 /dev/media2 最后一個(gè)(UVC Camera)就是設(shè)備,要記下是video多少,后期opencv-python需要
    發(fā)表于 06-16 19:16

    itop-3568開(kāi)發(fā)板機(jī)器視覺(jué)opencv開(kāi)發(fā)手冊(cè)-圖像繪制-畫(huà)線(xiàn)

    用 imshow()函數(shù)對(duì)畫(huà)線(xiàn)之后的圖像進(jìn)行展示; 第 8 行使用了 waitKey()函數(shù),持續(xù)顯示展示照片直到按鍵的按下。 保存退出之后,在終端界面中輸入以下命令進(jìn)行 python 代碼的運(yùn)行,運(yùn)行結(jié)果
    發(fā)表于 06-04 10:38

    基于LockAI視覺(jué)識(shí)別模塊:C++使用圖像的統(tǒng)計(jì)信息

    圖像處理中,統(tǒng)計(jì)信息可以幫助我們了解圖像的特性,例如區(qū)域內(nèi)的像素分布、顏色轉(zhuǎn)換以及特定區(qū)域的分析。本文將介紹基于LockAI視覺(jué)識(shí)別模塊如何提取興趣區(qū)域(ROI)、轉(zhuǎn)換顏色通道、計(jì)算均值和標(biāo)準(zhǔn)差
    發(fā)表于 05-08 10:31

    基于LockAI視覺(jué)識(shí)別模塊:C++圖像的基本運(yùn)算

    圖像處理中,理解圖像的基本操作是掌握計(jì)算機(jī)視覺(jué)技術(shù)的關(guān)鍵。本文章將介紹 基于LockAI視覺(jué)識(shí)別模塊下OpenCV圖像的基本運(yùn)算方法,
    發(fā)表于 05-06 16:56

    基于LockAI視覺(jué)識(shí)別模塊:C++圖像采集例程

    本文主要演示如何使用LockAI視覺(jué)識(shí)別模塊進(jìn)行視頻流的讀取,同時(shí)使用Edit模塊進(jìn)行圖像傳輸?;A(chǔ)知識(shí)講解1.1OpenCV簡(jiǎn)介OpenCV(OpenSourceComputerVisionLibra
    的頭像 發(fā)表于 04-30 18:23 ?886次閱讀
    基于LockAI視覺(jué)識(shí)別模塊:C++<b class='flag-5'>圖像</b>采集例程