绘制纹理C++

用数学和C++绘制一些纹理

sin(x * x + y * y)

int main() {int width = 400; // 宽度int height = 400; // 高度Mat texture = Mat::zeros(height, width, CV_8UC1);for (int y = 0; y < height; ++y) {for (int x = 0; x < width; ++x) {int value = static_cast<int>(255 * sin(x * x + y * y));texture.at<uchar>(y, x) = static_cast<uchar>(value);}}imshow("Generated Texture", texture);imwrite("D:\\doc\\image\\sin(xx+yy).jpg", texture);waitKey(0);return 0;
}

在这里插入图片描述

交错斜线

 // 生成交错斜线风格的黑白纹理for (int y = 0; y < height; ++y) {for (int x = 0; x < width; ++x) {if ((x + y) % 20 < 10) {texture.at<uchar>(y, x) = 255; // 白色}else {texture.at<uchar>(y, x) = 0; // 黑色}}}

在这里插入图片描述

竖纹

int width = 400; // 宽度
int height = 400; // 高度Mat texture = Mat::zeros(height, width, CV_8UC1);for (int y = 0; y < height; ++y) {for (int x = 0; x < width; ++x) {int value = static_cast<int>(255 * 0.5 * (1 + sin(2 * M_PI * x / 20)));//竖纹}
}

在这里插入图片描述

交错方块

int width = 400; // 宽度
int height = 400; // 高度Mat texture = Mat::zeros(height, width, CV_8UC1);for (int y = 0; y < height; ++y) {for (int x = 0; x < width; ++x) {int value = static_cast<int>(255 * 0.5 * (1 + sin(2 * M_PI * x / 20) * sin(2 * M_PI * y / 20)));}
}

在这里插入图片描述

sin(abs(x)) + sin(abs(y))

int width = 400; // 宽度
int height = 400; // 高度Mat texture = Mat::zeros(height, width, CV_8UC1);for (int y = 0; y < height; ++y) {for (int x = 0; x < width; ++x) {int value = static_cast<int>(255 * (sin(abs(x)) + sin(abs(y)))) ;}
}

在这里插入图片描述

sin(x)*sin(y)

int width = 400; // 宽度
int height = 400; // 高度Mat texture = Mat::zeros(height, width, CV_8UC1);for (int y = 0; y < height; ++y) {for (int x = 0; x < width; ++x) {int value = static_cast<int>(255 * ( sin(x)*sin(y) )) ;}
}

在这里插入图片描述

花纹1

公式 坐标系下的函数: r=sin(n*t)

for (int y = 0; y < height; ++y) {for (int x = 0; x < width; ++x) {int curx = x % 50;int cury = y % 50;originX = x/50+25;originY = y/50+25;float t = atan2(cury - originY, curx - originX);float r = sqrt((curx - originX) * (curx - originX) + (cury - originY) * (cury - originY));float functionValue = sin(n * t);if (abs(r - functionValue * 20) < 5) // 乘以20是为了放大图像{texture.at<uchar>(y, x) = static_cast<uchar>(200);}}
}

在这里插入图片描述

花纹2

void drawFunction() {// 创建一个空白图像int width = 200;int height = 200;cv::Mat image(height, width, CV_8UC3, cv::Scalar(255, 255, 255));// 设置极坐标参数int numPoints = max(width, height)*2;double radius = min(width, height)/4;// 绘制极坐标曲线for (int i = 0; i < numPoints; ++i) {double angle = 2 * CV_PI * i / numPoints;int x = static_cast<int>(radius * (cos(angle) +cos(angle*8)/2 + sin(0*angle) / 3)) + width / 2; // 将坐标平移到图像中心int y = static_cast<int>(radius * (sin(angle) +sin(angle*8)/2 + cos(0*angle)/3)) + height / 2; // 将坐标平移到图像中心if (x+1 >= 0 && x+1 < width && y+1 >= 0 && y+1 < height) {image.at<cv::Vec3b>(y, x) = cv::Vec3b(0, 0, 0); // 绘制像素点image.at<cv::Vec3b>(y+1, x) = cv::Vec3b(0, 0, 0); // 绘制像素点image.at<cv::Vec3b>(y, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点image.at<cv::Vec3b>(y + 1, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点}}imshow("Generated Texture", image);imwrite("D:\\code\\noise\\image\\polar_plot.jpg", image);waitKey(0);}

在这里插入图片描述
https://www.zhihu.com/zvideo/1471926178575970304

叠加

void drawFunction() {// 创建一个空白图像int width = 200;int height = 200;cv::Mat image(height, width, CV_8UC3, cv::Scalar(255, 255, 255));// 设置极坐标参数int numPoints = max(width, height)*4;double radius = min(width, height)/4;// 绘制极坐标曲线for (int i = 0; i < numPoints; ++i) {double angle = 2 * CV_PI * i / numPoints;double tempx = cos(angle) + cos(angle * 8) / 2 + sin(0 * angle) / 3;double tempy = sin(angle) + sin(angle * 8) / 2 + cos(0 * angle) / 3;int x = static_cast<int>(radius * (tempx)) + width / 2; // 将坐标平移到图像中心int y = static_cast<int>(radius * (tempy)) + height / 2; // 将坐标平移到图像中心if (x+1 >= 0 && x+1 < width && y+1 >= 0 && y+1 < height) {image.at<cv::Vec3b>(y, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y+1, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y + 1, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点}x = static_cast<int>(radius * (tempx)*0.8) + width / 2; // 将坐标平移到图像中心y = static_cast<int>(radius * (tempy) * 0.8) + height / 2; // 将坐标平移到图像中心if (x + 1 >= 0 && x + 1 < width && y + 1 >= 0 && y + 1 < height) {image.at<cv::Vec3b>(y, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y + 1, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y + 1, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点}x = static_cast<int>(radius * (tempx) * 0.618) + width / 2; // 将坐标平移到图像中心y = static_cast<int>(radius * (tempy) * 0.618) + height / 2; // 将坐标平移到图像中心if (x + 1 >= 0 && x + 1 < width && y + 1 >= 0 && y + 1 < height) {image.at<cv::Vec3b>(y, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y + 1, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y + 1, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点}x = static_cast<int>(radius * (tempx) * 0.4) + width / 2; // 将坐标平移到图像中心y = static_cast<int>(radius * (tempy) * 0.4) + height / 2; // 将坐标平移到图像中心if (x + 1 >= 0 && x + 1 < width && y + 1 >= 0 && y + 1 < height) {image.at<cv::Vec3b>(y, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y + 1, x) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点//image.at<cv::Vec3b>(y + 1, x + 1) = cv::Vec3b(0, 0, 0); // 绘制像素点}}imshow("Generated Texture", image);imwrite("D:\\code\\noise\\image\\polar_plot.jpg", image);waitKey(0);}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于go文件同步工具的升级迭代

介绍 同样&#xff0c;该工具适用于多个项目不同版本的维护&#xff0c;文件更新和新增的同步(自动创建目录)&#xff0c;支持自动提交svn。 升级迭代 之前的文件同步工具&#xff0c;依赖chrome和http包&#xff0c;有时候js加载页面不太稳定&#xff0c;所以有空闲就升级迭…

什么是TDR(威胁检测与响应)

网络安全是被动和主动方法的混合体。过去&#xff0c;企业往往局限于被动的方法&#xff0c;随着合规性和安全策略越来越受到重视&#xff0c;主动方法也越来越受到关注。与其他行业相比&#xff0c;网络安全是高度动态的&#xff0c;网络安全团队采用任何可以帮助他们优化的新…

CSS grid 网格布局

一个网格通常具有许多的列&#xff08;column&#xff09;与行&#xff08;row&#xff09;&#xff0c;以及行与行、列与列之间的间隙&#xff0c;这个间隙一般被称为沟槽&#xff08;gutter&#xff09;。 创建一个网格容器 display: grid;设置列 grid-template-columns: …

什么是上采样和下采样?

上采样和下采样是信号处理和图像处理中常用的技术&#xff0c;用于改变信号或图像的分辨率。 上采样&#xff08;Upsampling&#xff09;&#xff1a; 上采样是指增加信号或图像的采样率或分辨率&#xff0c;从而使其变得更大。它通过插值或填充新的数据点来增加采样点的数量。…

好工具知多少:国内外最常用的SCADA软件

随着现代SCADA系统的发展&#xff0c;工业自动化取得了巨大的飞跃。如今&#xff0c;监控和数据采集&#xff08;SCADA&#xff09;系统已成为工业过程的重要组成部分。这些系统使操作员能够实时监控和控制复杂的系统。 SCADA系统正在广泛的行业中发挥着至关重要的作用&#x…

MinIo 的操作与使用

文章目录 一、Client 连通 官方 API 文档&#xff1a;Documentation 官方中文文档&#xff1a;MinIO中文文档 一、Client 连通 Java 代码&#xff1a; MinioClient minioClient MinioClient.builder().endpoint("http://192.168.110.110:9000").credentials("x…

2023-12-05 AIGC-阿里通义千问QWEN-说明

摘要&#xff1a; 2023-12-05 AIGC-阿里通义千问QWEN-说明 代码仓库: GitHub - QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud. 说明: https://github.com/QwenLM/Qwen/blob/main/README_CN.md

Redis服务器安装配置

Redis是一种开源的NoSQL内存数据库&#xff0c;用于高性能的数据存储和访问。Redis支持多种数据类型&#xff0c;包括字符串、哈希、列表、集合和有序集合&#xff0c;并且支持分布式存储和操作。Redis的特点包括快速、高可用和易扩展等&#xff0c;适用于各种应用场景。 一、…

leetcode:LCR 122. 路径加密(python3解法)

难度&#xff1a;简单 假定一段路径记作字符串 path&#xff0c;其中以 "." 作为分隔符。现需将路径加密&#xff0c;加密方法为将 path 中的分隔符替换为空格 " "&#xff0c;请返回加密后的字符串。 示例 1&#xff1a; 输入&#xff1a;path "a.a…

ES-环境安装(elasticsearch:7.17.9,kibana,elasticsearch-head)

ES 环境搭建 1 拉取镜像 常用三件套 docker pull kibana:7.17.9 docker pull elasticsearch:7.17.9 docker pull mobz/elasticsearch-head:52 启动镜像 elasticsearch 安装 这里可以先不挂载文件启动一波&#xff0c;然后把容器里的文件拷贝出来 docker run -p 19200:9200 …

机器学习---朴素贝叶斯分类器的实现(对文本进行侮辱性言论和非侮辱性言论的分类)

1. loadDataSet函数 import numpy as np# 构造loadDataSet函数用于生成实验样本 def loadDataSet(): postingList[[my, dog, has, flea, problems, help, please],[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, postin…

SpringBoot本地判定判定工作日节假日及工作时段解决方案

SpringBoot本地判定判定工作日节假日及工作时段解决方案 文章目录 SpringBoot本地判定判定工作日节假日及工作时段解决方案主要思路建立数据库表&#xff0c;存储节假日及工作日通过代码生成增删改查Java后端代码及前端代码引入 hutool maven 依赖编写工具类&#xff0c;进行判…

解决PHPExcel导出一万行以上数据变空白的问题

上午同事突然反馈导出异常&#xff0c;导出少量数据正常&#xff0c;1万行以上就不行了&#xff0c; 开始以为又是mysql查询性能不足导致&#xff0c;经稍微研究测试&#xff0c;判定是php运行内存不足导致&#xff0c;经过下面的处理问题消失 修改内存限制 在PHP.ini文件中&…

从零开始学习 JS APL(一):完整指南和实例解析

本章内容主要是按一下来&#xff1a; 操作DOM BOM 比如 控制网页元 素交互等各种网页 交互效果 以下是我总结笔记&#xff08;仅供参考&#xff09; webAPL 获取DOM对象 变量声明有三个 var let 和 const 我们应该用那个呢&#xff1f; 首先var 先排除&#xff0c;老派写法…

JOSEF约瑟 同步检查继电器DT-13/200 100V柜内安装,板前接线

系列型号 DT-13/200同步检查继电器; DT-13/160同步检查继电器; DT-13/130同步检查继电器; DT-13/120同步检查继电器; DT-13/90同步检查继电器; DT-13/254同步检查继电器; 同步检查继电器DT-13/200 100V柜内板前接线 一、用途 DT-13型同步检查继电器用于两端供电线路的…

linux系统下农场种菜小游戏!

linux系统下农场种菜小游戏&#xff01; 今天给大家分享一个linux系统下一个简单的小游戏 源码如下&#xff0c;在linux系统下创建一个.sh的脚本文件&#xff0c;复制粘贴进去即可&#xff01; #!/bin/bash# 初始化变量 vegetables("生菜" "西兰花" &qu…

SpringBoot启动流程

SpringBoot启动流程 文章目录 SpringBoot启动流程SpringBoot启动流程 SpringBoot启动流程 视频链接&#xff1a; https://www.bilibili.com/video/BV15b4y1a7yG/?p174&spm_id_frompageDriver&vd_sourcef6debc5a79e3f424f9dde2f13891b158 看李老师讲的吧&#xff0c;特…

服务器数据恢复—服务器断电导致XenServer数据文件丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌720服务器搭配该品牌某型号RAID卡&#xff0c;使用4块STAT硬盘组建了一组RAID10阵列。服务器上部署XenServer虚拟化平台&#xff0c;系统盘 数据盘两个虚拟机磁盘。虚拟机上安装的是Windows Server操作系统&#xff0c;作为Web服务器使用…

虾皮助手:提升Shopee卖家运营效率的必备辅助工具

随着电商市场的快速发展&#xff0c;越来越多的卖家选择在Shopee平台上开设在线商店。然而&#xff0c;随之而来的是更多的竞争和挑战。为了在这个竞争激烈的市场中脱颖而出&#xff0c;卖家们需要寻找一种工具来帮助他们更高效地管理和运营他们的店铺。虾皮助手&#xff08;Sh…

CSS特效026:扇骨打开关闭的动画

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…