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

目录
  • 准备工作
  • 代码实现
  • 完整代码

最近在学习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++ OpenCV实现像素画的示例代码的文章就介绍到这了,更多相关C++ OpenCV像素画内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python OpenCV处理图像之图像像素点操作

    本文实例为大家分享了Python OpenCV图像像素点操作的具体代码,供大家参考,具体内容如下 0x01. 像素 有两种直接操作图片像素点的方法: 第一种办法就是将一张图片看成一个多维的list,例如对于一张图片im,想要操作第四行第四列的像素点就直接 im[3,3] 就可以获取到这个点的RGB值. 第二种就是使用 OpenCV 提供的 Get1D. Get2D 等函数. 推荐使用第一种办法吧,毕竟简单. 0x02. 获取行和列像素 有一下四个函数: cv.GetCol(im, 0): 返回第

  • C++ OpenCV实现抖音"蓝线挑战"特效

    目录 前言 一.图像扫描 二.生成定格图像 三.图像混合 四.效果显示 五.源码 总结 前言 本文将使用OpenCV C++ 实现抖音上的特效“蓝线挑战”.虽然看起来觉得很牛的样子,但如果了解其中的原理就非常简单了.本案例是我自己对于这个特效实现过程的理解,仅供参考. 算法原理可以分为三个流程: 1.将视频(图像)从(顶->底)或(左->右)逐行(列)扫描图像. 2.将扫描完成的行(列)像素重新生成定格图像. 3.使用原帧图像像素填充未扫描到的像素. 接下来就具体来看看是如何实现的吧. 一.图

  • C++ OpenCV实现图像去水印功能

    目录 前言 一.水印定位 二.图像修复 三.效果显示 四.源码 总结 前言 本文将使用OpenCV C++ 进行简单图像水印去除.我们在网上download图片时,经常因为版权问题有水印.本案例通过编写算法进行简单水印去除. 一.水印定位 如图所示,图像左下角.右下角有水印.第一步,我们首先得定位水印所在位置. Mat gray; cvtColor(src, gray, COLOR_BGR2GRAY); //图像二值化,筛选出白色区域部分 Mat thresh; threshold(gray,

  • 基于C++ OpenCV制作电子相册查看器

    目录 前言 一.图片读取 二.图片展示 三.键盘控制 四.效果显示 五.源码 总结 前言 本文将使用OpenCV C++ 制作电子相册查看器.类似于win10系统的“照片”功能.接下来就具体来看看是如何一步步的实现吧. 一.图片读取 我们想要一张张的查看文件夹下的图片,第一步就得读取将该文件夹下的所有图片. 如上图所示,为我创建的文件夹,该文件夹下有14张图片.接下来我们就编写代码读取该文件夹下的所有图片.将读取到的图片存储在images容器. //读取文件夹下所有图片 string filen

  • Python OpenCV对图像像素进行操作

    目录 遍历并修改图像像素值 图像的加减乘除运算 遍历并修改图像像素值 在使用opencv处理图像时,有时需要对图像的每个像素点进行处理,比如取反.修改值等操作,就需要通过h和w遍历像素.依然以下图为例: 具体代码: import cv2 as cv import numpy as np def image_pixel(image_path: str): img = cv.imread(image_path, cv.IMREAD_COLOR) cv.imshow('input', img) h,

  • C++ OpenCV实现二维码检测功能

    目录 前言 一.二维码检测 二.二维码识别 三.二维码绘制 四.源码 总结 前言 本文将使用OpenCV C++ 进行二维码检测. 一.二维码检测 首先我们要先将图像进行预处理,通过灰度.滤波.二值化等操作提取出图像轮廓.在这里我还添加了形态学操作,消除噪点,有效将矩形区域连接起来. Mat gray; cvtColor(src, gray, COLOR_BGR2GRAY); Mat blur; GaussianBlur(gray, blur, Size(3, 3), 0); Mat bin;

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

    目录 准备工作 代码实现 完整代码 最近在学习OpenCV,准备后续更新一波OpenCV相关的内容.代码实现主要是以 C++ 为主, 另外为了辅助学习,还会使用C# 开发一款桌面的软件,用于演示各种功能. 今天我给大家准备了一个类似于打马赛克的功能.通过像素的变化,演示一个像素画的功能.像素画在 NFT 中特别的流行. 准备工作 需要安装好 OpenCV,OpenCV的安装过程在这里不再赘述.另外我们准备了一个图片. 代码实现 首先我们需要在 CmakeLists.txt 文件中, 添加 Ope

  • opencv调整图像亮度对比度的示例代码

    图像处理 图像变换就是找到一个函数,把原始图像矩阵经过函数处理后,转换为目标图像矩阵. 可以分为两种方式,即像素级别的变换和区域级别的变换 Point operators (pixel transforms) Neighborhood (area-based) operators 像素级别的变换就相当于\(p_{after}(i,j) = f(p_{before}(i,j))\),即变换后的每个像素值都与变换前的同位置的像素值有个函数映射关系. 对比度和亮度改变 线性变换 最常用的是线性变换.即

  • Python+Opencv实现数字识别的示例代码

    一.什么是数字识别?   所谓的数字识别,就是使用算法自动识别出图片中的数字.具体的效果如下图所示: 上图展示了算法的处理效果,算法能够自动的识别到LCD屏幕上面的数字,这在现实场景中具有很大的实际应用价值.下面我们将对它的实现细节进行详细解析. 二.如何实现数字识别?   对于数字识别这个任务而言,它并不是一个新的研究方向,很久之前就有很多的学者们在关注这个问题,并提出了一些可行的解决方案,本小节我们将对这些方案进行简单的总结. 方案一:使用现成的OCR技术. OCR,即文字识别,它是一个比较

  • 利用OpenCV进行对象跟踪的示例代码

    目录 OpenCV 对象跟踪 OpenCV 对象跟踪器 物体跟踪 总结 OpenCV 对象跟踪 这篇文章使用 OpenCV 中内置的八种不同的对象跟踪算法,实现对物体的跟踪. 首先,介绍一下8种跟踪算法. 然后,演示如何使用OpenCV实现这些跟踪算法. 最后,对本文做总结. OpenCV 对象跟踪器 OpenCV 八种对象跟踪器: BOOSTING Tracker:基于用于驱动 Haar 级联 (AdaBoost) 背后的机器学习的相同算法,但与 Haar 级联一样,已有十多年的历史.这个跟踪

  • C语言实现绘制绕线画的示例代码

    目录 绕线画简介 算法简介 示例 绕线画简介 简单点来说,就是在木板上钉一圈钉子,通过绕线进行构图,最终呈现出一幅图像. 算法简介 可以总结概括一下, 首先需要有一张图,可以是彩色的,但是必须颜色比较分明. 对图像进行灰度处理. 随机生成 n 组数,就是每两个钉子的组合. 计算 n 组数据连线所过图像像素的平均数,求出最小的一组. 连接该组钉子,并对这条线经过的像素值分别加 m. 重复前面步骤 3 到步骤 5 直到绘制 z 条线结束循环. 示例 #include<graphics.h> #in

  • Opencv判断颜色相似的图片示例代码

    问题描述 有一个项目,大体是要判断一下一篇文章内的配图突不突兀. 素材准备 所以就从网上随便找了4张图: 可以看出,前3张图片从颜色上.从阅读感受上,应该是相似的,而最后一张应该是不同的. 而当我们只对图片做缩放(为了跑得快),然后用bgr通道出直方图算相似度时: 却发现,只有第一张和第二张图片的相似度是大于0.5的,而第二.三张,以及第三.四张图片之间的相似度几乎都小于等于0.1. 思考方法 于是,经过思考后我觉得,判断两张图片在颜色上相不相似,其本质在于判断其直方图分布的形状相不相似,而不应

  • OpenCV实战之图像拼接的示例代码

    目录 背景 实现步骤 一.读取文件 二.单应性矩阵计算 三.图像拼接 总结 背景 图像拼接可以应用到手机中的全景拍摄,也就是将多张图片根据关联信息拼成一张图片: 实现步骤 1.读文件并缩放图片大小: 2.根据特征点和计算描述子,得到单应性矩阵: 3.根据单应性矩阵对图像进行变换,然后平移: 4.图像拼接并输出拼接后结果图: 一.读取文件 第一步实现读取两张图片并缩放到相同尺寸: 代码如下: img1 = cv2.imread('map1.png') img2 = cv2.imread('map2

  • Python+OpenCV实现角度测量的示例代码

    本文介绍如何使用python语言实现角度测量,程序包括鼠标选点.直线斜率计算.角度计算三个子程序和一个主程序.最终实现效果:在图片上用鼠标确认三点,程序将会显示由此三点确定的角度,如下图所示. 1.鼠标选点 # -*- coding: utf-8 -*- import cv2 path = "picture_mqa\\angle_measure.bmp" img = cv2.imread(path) pointsList = [] def mousePoints(event,x,y,f

  • openCV实现图像融合的示例代码

    目录 1. 概念 2. 流程 3 代码 1. 概念 图像融合: 两幅图片叠加在一起,形成前景背景的效果. 2. 流程 (1)读入要融合的两幅图片.(2)把两幅图片调整到统一大小,方便下一步叠加.(3)对两幅图片按照一定的权重相加.(4)显示图片.img1,img2 --> resize --> cv2.addWeighted()–>show addWeighted方法: 函数原型: void addWeighted(InputArray src1, double alpha, Input

  • opencv python 2D直方图的示例代码

    Histograms - 3 : 2D Histograms 我们已经计算并绘制了一维直方图,因为我们只考虑一个特征,即像素的灰度强度值.但在二维直方图中,需要考虑两个特征,通常,它用于查找颜色直方图,其中两个要素是每个像素的色调和饱和度值. OpenCV中的2D直方图 使用函数cv.calcHist(), 对于颜色直方图,我们需要将图像从BGR转换为HSV. (请记住,对于1D直方图,我们从BGR转换为灰度).对于2D直方图,其参数将修改如下: channels = [0,1]:因为我们需要同

随机推荐