最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ OpenCV制作黑客帝國風(fēng)格的照片

 更新時間:2022年01月23日 14:43:46   作者:青空coding  
這篇文章主要介紹了如何通過C++ OpenCV制作出黑客帝國風(fēng)格的照片,文中的示例代碼講解詳細,對我們學(xué)習(xí)OpenCV有一定幫助,需要的可以參考一下

前不久,黑客帝國系列最新的 《矩陣重啟》 上映了。黑客帝國是早期科幻類型的翹楚。但是這次有點垮了。豆瓣評分不到6分。

小的時候,看到黑客帝國的那些照片,一串串?dāng)?shù)字從上而下, 感覺特別酷炫。 今天我們就來看看怎么制作類似的效果。

準(zhǔn)備工作

一張基努里維斯的照片

準(zhǔn)備好項目需要使用到的庫 opencv,在 CMakeLists.txt 里配置完成。

cmake_minimum_required(VERSION 3.17)
project(opencv_demo)

set(CMAKE_CXX_STANDARD 14)

find_package(OpenCV 4 REQUIRED)

include_directories(
? ? ? ? ${OPENCV_INCLUDE_DIRS}
)
add_executable(opencv_demo main.cpp)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})

開始寫代碼

開始寫讀取文件的代碼

std::string path = "path/to/img";
cv::Mat img = cv::imread(path);

獲取到圖像的寬高

int height = img.rows;
int width = img.cols;

int cellHeight = 20, cellWidth = 20;

做一次圖片的縮放,然后進行圖片的取色操作

    cv::Mat img2 = img.clone();
    cv::resize(img, img2, cv::Size((width/ cellWidth), (height / cellHeight)), 0.0, 0.0, cv::INTER_NEAREST);

新建一個圖片,用于放置 0 1 數(shù)字,需要注意的是,這里建立的新圖片需要和原圖的尺寸,顏色通道數(shù)等等都是相同的才行,否則后續(xù)合并圖片的時候,會有問題。

cv::Mat newImg = cv::Mat::zeros(height, width, CV_8UC3);

對新圖片進行涂色添加文字處理

    for (int i = 0; i < newHeight; ++i) {
        for (int j = 0; j < newWidth; ++j) {
            cv::Scalar color = img2.at<cv::Vec3b>(i, j);
            int b = color[0];
            int g = color[1];
            int r = color[2];
            int k = (b + g + r) / 3;
            if (k < 128) {
                cv::putText(newImg, "1", cv::Point(j*cellWidth, i * cellHeight),cv::FONT_HERSHEY_COMPLEX_SMALL,0.7,cv::Scalar(0,g, 0));
            } else {
                cv::putText(newImg, "0", cv::Point(j*cellWidth, i * cellHeight),cv::FONT_HERSHEY_COMPLEX_SMALL,0.7,cv::Scalar(0,g, 0));
            }
        }
    }

到這一步我們的工作基本已經(jīng)完成了。 再進行一次圖片合成,就OK了。

cv::addWeighted(img, 0.2, newImg , 0.8 , 0, img);

最終效果圖

完整代碼

#include <iostream>
#include <opencv2/opencv.hpp>

int main() {

? ? std::string path = "path/to/img";
? ? cv::Mat img = cv::imread(path);
? ?
? ? int height = img.rows;
? ? int width = img.cols;

? ? int cellHeight = 20, cellWidth = 20;
? ? cv::Mat img2 = img.clone();
? ? cv::resize(img, img2, cv::Size((width/ cellWidth), (height / cellHeight)), 0.0, 0.0, cv::INTER_NEAREST);

? ? int newWidth = img.cols;
? ? int newHeight = img.rows;

? ? cv::Mat newImg = cv::Mat::zeros(height, width, CV_8UC3);
? ??
? ? for (int i = 0; i < newHeight; ++i) {
? ? ? ? for (int j = 0; j < newWidth; ++j) {
? ? ? ? ? ? cv::Scalar color = img2.at<cv::Vec3b>(i, j);
? ? ? ? ? ? int b = color[0];
? ? ? ? ? ? int g = color[1];
? ? ? ? ? ? int r = color[2];
? ? ? ? ? ? int k = (b + g + r) / 3;
? ? ? ? ? ? if (k < 128) {
? ? ? ? ? ? ? ? cv::putText(newImg, "1", cv::Point(j*cellWidth, i * cellHeight),cv::FONT_HERSHEY_COMPLEX_SMALL,0.7,cv::Scalar(0,g, 0));
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? cv::putText(newImg, "0", cv::Point(j*cellWidth, i * cellHeight),cv::FONT_HERSHEY_COMPLEX_SMALL,0.7,cv::Scalar(0,g, 0));
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ??
? ? cv::addWeighted(img, 0.2, newImg , 0.8 , 0, img);

? ? cv::imshow("def", img);
? ? cv::waitKey(0);

}

總結(jié)

本文通過使用opencv 的取色, 上色, 圖片合并功能達到我們想要的效果。

到此這篇關(guān)于C++ OpenCV制作黑客帝國風(fēng)格的照片的文章就介紹到這了,更多相關(guān)OpenCV內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言如何實現(xiàn)一些算法或者函數(shù)你知道嗎

    C語言如何實現(xiàn)一些算法或者函數(shù)你知道嗎

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)一些算法或者函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Qt GUI圖形圖像開發(fā)之QT表格控件QTableView,QTableWidget復(fù)雜表頭(多行表頭) 及凍結(jié)、固定特定的行的詳細方法與實例

    Qt GUI圖形圖像開發(fā)之QT表格控件QTableView,QTableWidget復(fù)雜表頭(多行表頭) 及凍結(jié)、固定特

    這篇文章主要介紹了Qt GUI圖形圖像開發(fā)之QT表格控件QTableView,QTableWidget復(fù)雜表頭(多行表頭) 及凍結(jié)、固定特定的行的詳細方法與實例,需要的朋友可以參考下
    2020-03-03
  • 動態(tài)數(shù)組C++實現(xiàn)方法(分享)

    動態(tài)數(shù)組C++實現(xiàn)方法(分享)

    下面小編就為大家?guī)硪黄獎討B(tài)數(shù)組C++實現(xiàn)方法(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • OpenCV?直方圖均衡化的實現(xiàn)原理解析

    OpenCV?直方圖均衡化的實現(xiàn)原理解析

    直方圖均衡化是通過拉伸像素強度分布范圍來增強圖像對比度的一種方法,今天通過本文給大家介紹OpenCV?直方圖均衡化的實現(xiàn)原理解析,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • C語言入門篇--關(guān)鍵字static詳解

    C語言入門篇--關(guān)鍵字static詳解

    本篇文章是C語言系列基礎(chǔ)篇,C語言中,static是用來修飾變量和函數(shù):1.修飾局部變量–>靜態(tài)局部變量2.修飾全局變量–>靜態(tài)全局變量3.修飾函數(shù)–>靜態(tài)函數(shù)
    2021-08-08
  • C++ 泛型編程詳解

    C++ 泛型編程詳解

    這一篇介紹一下 C++ 編程中與面向?qū)ο蟛⒘械牧硪淮蠓种А盒途幊?,這一篇主要介紹函數(shù)模板、類模板和成員模板三大部分,需要的朋友可以參考下
    2020-02-02
  • C++實現(xiàn)酒店管理系統(tǒng)

    C++實現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • c語言實現(xiàn)找最大值最小值位置查找

    c語言實現(xiàn)找最大值最小值位置查找

    這篇文章主要介紹了c語言實現(xiàn)找最大值最小值位置查找,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Lambda表達式里面修改外部變量問題

    Lambda表達式里面修改外部變量問題

    這篇文章主要介紹了Lambda表達式里面修改外部變量的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言解數(shù)獨程序的源碼

    C語言解數(shù)獨程序的源碼

    這篇文章主要為大家詳細介紹了C語言解數(shù)獨程序的源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

绵竹市| 陇南市| 姜堰市| 北安市| 漳平市| 巴林右旗| 景谷| 扶余县| 九龙城区| 阳朔县| 青浦区| 龙井市| 卫辉市| 通道| 武山县| 澄江县| 永嘉县| 新和县| 宣武区| 抚顺县| 永吉县| 肥东县| 合江县| 定结县| 乃东县| 石河子市| 托克托县| 襄樊市| 东阿县| 鄄城县| 义乌市| 芷江| 卓尼县| 黄平县| 得荣县| 吉安县| 信阳市| 运城市| 维西| 夏津县| 通江县|