欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C++ OpenCV实现像素画的示例代码

时间:2022-12-12 10:15:14|栏目:C代码|点击:

最近在学习OpenCV,准备后续更新一波OpenCV相关的内容。代码实现主要是以 C++ 为主, 另外为了辅助学习,还会使用C# 开发一款桌面的软件,用于演示各种功能。

今天我给大家准备了一个类似于打马赛克的功能。通过像素的变化,演示一个像素画的功能。像素画在 NFT 中特别的流行。

准备工作

需要安装好 OpenCV,OpenCV的安装过程在这里不再赘述。另外我们准备了一个图片。

代码实现

首先我们需要在 CmakeLists.txt 文件中, 添加 OpenCV 的依赖

find_package(OpenCV 4 REQUIRED)

include_directories(
        ${OPENCV_INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})

读取文件

std::string path = "/path/to/img/";
cv::Mat img = cv::imread(path +"meinv.jpeg");

获取原图的像素宽高,然后进行像素比缩放。

int height = img.size().height;
int width = img.size().width;

int pixel_size = 10;

int new_width = width / pixel_size;
int new_height = height / pixel_size;

根据设定的像素比, 对原图进行缩小,再放大的两次 resize 操作。这样就完成了像素图的处理。

cv::Mat imgTmp;
cv::resize(img, imgTmp, cv::Size(new_width, new_height), 0, 0, cv::INTER_LINEAR);

cv::resize(imgTmp, imgTmp, cv::Size(width/2, height/2),0, 0, cv::INTER_LINEAR);

那我们来看下处理过之后的图像效果吧

效果看起来还可以,图片颜色单一图片尺寸稍微小一些的效果会好很多。

完整代码

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

int main() {

    std::string path = "/Users/wbf/Desktop/";
    cv::Mat img = cv::imread(path +"meinv.jpeg");
    cv::imshow("meinv", img);
    int height = img.size().height;
    int width = img.size().width;

    int pixel_size = 10;

    int new_width = width / pixel_size;
    int new_height = height / pixel_size;

    std::cout << new_height << "," << new_width << std::endl;
    cv::Mat imgTmp;
    cv::resize(img, imgTmp, cv::Size(new_width, new_height), 0, 0, cv::INTER_LINEAR);

    cv::resize(imgTmp, imgTmp, cv::Size(width/2, height/2),0, 0, cv::INTER_LINEAR);

//    std::vector<cv::Mat> v_mat ;
//    v_mat.push_back(img);
//    v_mat.push_back(imgTmp);
    cv::imshow("meinv2" , imgTmp);
    cv::waitKey(0);
}

上一篇:C++二分查找在搜索引擎多文档求交的应用分析

栏    目:C代码

下一篇:OpenCV去除绿幕抠图源码

本文标题:C++ OpenCV实现像素画的示例代码

本文地址:http://www.codeinn.net/misctech/221160.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有