色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

新機器視覺 ? 來源:CSDN技術(shù)社區(qū) ? 作者:LaoYuanPython ? 2021-04-14 14:03 ? 次閱讀

效果展示

首先看一下目標效果:

素材準備 & 思路分析

本次雪花來源于如下圖片

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

珠峰背景的天空飄落著紛紛揚揚的雪花,意境不錯吧?

實現(xiàn)思路

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

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

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

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

1、生成各種雪花形狀

def initSnowShapes(): “”“ 從文件中讀入雪花圖片,并進行不同尺度的縮小和不同角度的旋轉(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)生一排雪花對象,每個雪花隨機從snowShapesList取一個、橫坐標位置隨機、縱坐標初始為0 :param width: 背景圖像寬度 :param count: 希望的雪花數(shù) 一個包含產(chǎn)生的多個雪花對象信息的列表,每個列表的元素代表一個雪花對象,雪花對象包含三個信息,在snowShapesList的索引號、初始x坐標、初始y坐標(才生成固定為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、將所有雪花對象融合到背景圖像

def putSnowObjectToImg(img): “”“ 將所有snowObjects中的雪花對象融合放到圖像img中,融合時y坐標隨機下移一定高度,x坐標左右隨機小范圍內(nèi)移動 ”“” 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] #每個元素為(imgId,x,y) if imgObj[2]》rows: #如果雪花的起始縱坐標已經(jīng)超出背景圖像的高度(即到達背景圖像底部),則該雪花對象需進行失效處理 del(snowObjects[index]) else: imgSnow = snowShapesList[imgObj[0]] x,y = imgObj[1:] #取該雪花上次的位置 x = x+random.randint(-1*horizontalMaxDistance,horizontalMaxDistance) #橫坐標隨機左右移動一定范圍 y = y+random.randint(1,verticalMaxDistance) #縱坐標隨機下落一定范圍 snowObjects[index] = (imgObj[0],x,y) #更新雪花對象信息 imgResult = addImgToLargeImg(imgSnow,imgResult,(x,y),180) #將所有雪花對象圖像按照其位置融合到背景圖像中 return imgResult #返回融合圖像

4、主函數(shù)

主函數(shù)讀入背景圖片,初始化雪花形狀列表,然后循環(huán)自頂部產(chǎn)生一排新的雪花,并將所有雪花對象動態(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=[] #圖片中要顯示的所有雪花對象

def initSnowShapes(): “”“ 從文件中讀入雪花圖片,并進行不同尺度的縮小和不同角度的旋轉(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)生一排雪花對象,每個雪花隨機從snowShapesList取一個、橫坐標位置隨機、縱坐標初始為0 :param width: 背景圖像寬度 :param count: 希望的雪花數(shù) 當前行對應的豎直坐標 一個包含產(chǎn)生的多個雪花對象信息的列表,每個列表的元素代表一個雪花對象,雪花對象包含三個信息,在snowShapesList的索引號、初始x坐標、初始y坐標(才生成固定為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中的雪花對象融合放到圖像img中,融合時y坐標隨機下移一定高度,x坐標左右隨機小范圍內(nèi)移動 ”“” 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] #每個元素為(imgId,x,y) if imgObj[2]》rows: #如果雪花的起始縱坐標已經(jīng)超出背景圖像的高度(即到達背景圖像底部),則該雪花對象需進行失效處理 del(snowObjects[index]) else: imgSnow = snowShapesList[imgObj[0]] x,y = imgObj[1:] #取該雪花上次的位置 x = x+random.randint(-1*horizontalMaxDistance,horizontalMaxDistance) #橫坐標隨機左右移動一定范圍 y = y+random.randint(1,verticalMaxDistance) #縱坐標隨機下落一定范圍 snowObjects[index] = (imgObj[0],x,y) #更新雪花對象信息 imgResult = addImgToLargeImg(imgSnow,imgResult,(x,y),180) #將所有雪花對象圖像按照其位置融合到背景圖像中 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é)

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

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

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

可以看到該效果就不太讓人滿意。

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

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

    關(guān)注

    31

    文章

    635

    瀏覽量

    41373
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84745

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

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RK3568 + OpenCV 會碰撞出什么火花?案例詳解:2-1 基于OpenCV的畫線實驗

    一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。 OpenCV具有以下特點: 不管是科
    發(fā)表于 12-03 14:09

    一個月速成python+OpenCV圖像處理

    適用于哪些場景,然后通過Python編寫代碼來實現(xiàn)這些算法,并應用于實際項目中,實現(xiàn)圖像的檢測、識別、分類、定位、測量等目標。本文將介紹一個高效學習Python+O
    的頭像 發(fā)表于 11-29 18:27 ?143次閱讀
    一個月速成<b class='flag-5'>python+OpenCV</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>

    手寫圖像模板匹配算法在OpenCV中的實現(xiàn)

    OpenCV中的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一個主要的原因是查找最大閾值,只能匹配一個,自己比對閾值,又導致無法正確設(shè)定閾值范圍,所以問題很多。于是我重新寫了純Python版本的NCC圖像模板匹配的代碼
    的頭像 發(fā)表于 11-11 10:12 ?252次閱讀
    手寫<b class='flag-5'>圖像</b>模板匹配算法在<b class='flag-5'>OpenCV</b>中的實現(xiàn)

    opencv圖像識別有什么算法

    OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,提供了大量的圖像處理和計算機視覺相關(guān)的算法。以下是一些常見的Ope
    的頭像 發(fā)表于 07-16 10:40 ?1072次閱讀

    opencv-pythonopencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Pytho
    的頭像 發(fā)表于 07-16 10:38 ?1221次閱讀

    opencv的主要功能有哪些

    OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺庫,提供了大量的計算機視覺算法和工具。以下是OpenCV的主要功能: 圖像處理
    的頭像 發(fā)表于 07-16 10:35 ?1581次閱讀

    鴻蒙開發(fā)接口圖形圖像:【W(wǎng)ebGL2】

    WebGL2支持圖形的繪制,包括對當前繪制圖形的位置、顏色等進行處理,其中相對WebGL來說對渲染管道和著色語言進行了增強。
    的頭像 發(fā)表于 05-30 15:19 ?529次閱讀
    鴻蒙開發(fā)接口<b class='flag-5'>圖形圖像</b>:【W(wǎng)ebGL2】

    鴻蒙開發(fā)接口圖形圖像:【W(wǎng)ebGL】

    WebGL提供圖形繪制的能力,包括對當前繪制圖形的位置、顏色等進行處理
    的頭像 發(fā)表于 05-30 09:31 ?530次閱讀
    鴻蒙開發(fā)接口<b class='flag-5'>圖形圖像</b>:【W(wǎng)ebGL】

    STM32MP135如何使用opencv-python或v4l2-ctl打開攝像頭,并保存為圖片?

    行。 但是官方的例程中,直接用v4l推送到media上,直接顯示的又是可以的。 請問我該如何使用opencv-python 或v4l2-ctl打開攝像頭,并保存為圖片?
    發(fā)表于 05-30 06:16

    鴻蒙OS元服務(wù)開發(fā)說明:【W(wǎng)ebGL網(wǎng)頁圖形庫開發(fā)接口】

    WebGL主要幫助開發(fā)者在前端開發(fā)中完成圖形圖像的相關(guān)處理,比如繪制彩色圖形等。目前該功能僅支持使用兼容JS的類Web開發(fā)范式開發(fā)。
    的頭像 發(fā)表于 04-02 17:02 ?470次閱讀
    鴻蒙OS元服務(wù)開發(fā)說明:【W(wǎng)ebGL網(wǎng)頁<b class='flag-5'>圖形</b>庫開發(fā)接口】

    鴻蒙原生應用元服務(wù)開發(fā)-WebGL網(wǎng)頁圖形庫開發(fā)接口說明

    一、場景介紹 WebGL主要幫助開發(fā)者在前端開發(fā)中完成圖形圖像的相關(guān)處理,比如繪制彩色圖形等。目前該功能僅支持使用兼容JS的類Web開發(fā)范式開發(fā)。 二、接口說明 表1 WebGL主要接口列表 本文參考引用HarmonyOS官方開
    發(fā)表于 03-11 15:51

    330-基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡 圖形圖像硬件加速器

    標簽: Net FPGA , XC7K325T板卡 , XC7K325T處理板 , 軟件無線電處理平臺 , 圖形圖像硬件加速器
    的頭像 發(fā)表于 03-04 14:14 ?627次閱讀
    330-基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡 <b class='flag-5'>圖形圖像</b>硬件加速器

    鴻蒙開發(fā)圖形圖像——@ohos.effectKit (圖像效果)

    圖像效果提供處理圖像的一些基礎(chǔ)能力,包括對當前圖像的亮度調(diào)節(jié)、模糊化、灰度調(diào)節(jié)、智能取色等。 該模塊提供以下圖像效果相關(guān)的常用功能: Fil
    的頭像 發(fā)表于 02-22 16:08 ?420次閱讀
    鴻蒙開發(fā)<b class='flag-5'>圖形圖像</b>——@ohos.effectKit (<b class='flag-5'>圖像</b>效果)

    itop-RK3588開發(fā)板機器視覺開發(fā)OpenCV-Python的安裝

    itop-RK3588開發(fā)板機器視覺開發(fā)OpenCV-Python的安裝
    的頭像 發(fā)表于 01-26 15:18 ?4212次閱讀
    itop-RK3588開發(fā)板機器視覺開發(fā)<b class='flag-5'>OpenCV-Python</b>的安裝

    使用圖像處理OpenCV從攝像頭獲取數(shù)據(jù)并在PyQt5上顯示出來

    OpenCV能夠處理圖像、視頻、深度圖像等各種類型的視覺數(shù)據(jù)
    的頭像 發(fā)表于 01-05 17:32 ?2615次閱讀
    使用<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>庫<b class='flag-5'>OpenCV</b>從攝像頭獲取數(shù)據(jù)并在PyQt5上顯示出來
    主站蜘蛛池模板: 日本午夜看x费免| 国产乱人伦AV麻豆网| 人与禽交3d动漫羞羞动漫| 国产免费人视频在线观看免费| 中国人泡妞xxxxxxxx19| 天天干夜夜曰| 彭丹吃奶门| 久久永久免费视频| 国产午夜精品一区二区三区| www国产av偷拍在线播放| 曰批国产精品视频免费观看| 晚夜免费禁用十大亏亏| 欧美亚洲精品一区二三区8V| 久久这里都是精品| 国精产品砖一区二区三区糖心 | ca88亚洲城娱乐| 中文无码热在线视频| 亚洲国产cao| 我的好妈妈8高清在线观看WWW| 欧美性狂猛AAAAAA| 美女撒尿无遮挡免费中国| 久久777国产线看观看精品卜| 国产精品视频大全| 刮伦人妇A极一片| 啊灬啊灬啊灬快高潮视频| 69久久国产精品热88人妻| 一二三四在线观看韩国| 亚洲国产成人精品无码区APP| 四虎影院2022| 熟女人妻-蜜臀AV-首页| 日本漫画母亲口工子全彩| 欧美91精品久久久久网免费| 美女白虎穴| 免费一级毛片在线观看| 免费A级毛片无码鲁大师| 六六影院午夜伦理| 绝对诱惑在线试听| 毛片在线网址| 男人边吃奶边挵进去呻吟漫画 | 国产精品久久久久久久久齐齐 | 久草在线福利视频在线播放|