python两个函数图像怎么分开画而且加表格

python两个函数图像怎么分开画而且加表格,第1张

一、函数说明
在使用python作图时,应用最广的就是matplotlib包,但我们平时使用matplotlib时主要是画一些简单的图表,很少有涉及分段函数。本次针对数值实验中两个较为复杂的函数,使用其构建分段函数图像
二、图像代码
211、函数公式:
y=4sin(4πt)-sgn(t-03)-sgn(072-t)
212、代码如下:
import numpy as np
import matplotlibpyplot as plt
def sgn(x):
if x>0:
return 1
elif x<0:
return -1
else:
return 0
t=nparange(0,1,001)
y=[]
for i in t:
y_1=4npsin(4nppii)-sgn(i-03)-sgn(072-i)
yappend(y_1)
pltplot(t,y)
pltxlabel("t")
pltylabel("y")
plttitle("Heavsine")
pltshow()
213、运行结果如下:
81036331d721706ae12808beb99b9574png
221、函数公式:
479029html
222、代码如下:
import numpy as np
import matplotlibpyplot as plt
def g(x):
if x>0:
return x
else:
return 0
t=nparange(0,1,001)
y=[]
for i in t:
y_1=g(i(1-i))npsin((2nppi105)/(i+005))
yappend(y_1)
pltplot(t,y)
pltxlabel("t")
pltylabel("y")
plttitle("TimeSine")
pltshow()

html里是不能有两个一样的id吧?你那个没报错吗
你要是不嫌麻烦就给两个div分别定位
<div class=“apDiv” id="apDiv1"><img src="tm-img-310x180-1_看图王jpg" width="264" height="180" alt=""/></div>
<div class=“apDiv” id="apDiv2"><img src="tm-img-310x180-2_看图王jpg" width="200" height="180" alt=""/></div>
<style type="text/css">
apDiv{
width: 264px;
height: 100px;
}
#apDiv1 {
position: absolute;
left: 249px; /左右位置/
top: 1014px;/上下位置/
}
#apDiv2 {
position: absolute;
left: 615px; /左右位置/
top: 1014px;/上下位置/
}
<style>
希望对你有帮助!
xiwan

由于算法的需要,需要把彩色图像的R、G、B值分离出来,OpenCV中正好有split() 和 merge() 函数可以实现。
一、对单独彩色的RGB通道分离:
#include <iostream>
#include "cvh"
#include "highguih"

using namespace std;
using namespace cv;

int main(int argc,char argv[])
{
Mat img = imread("lenajpg"/,CV_LOAD_IMAGE_COLOR/);
Mat channel[3];
split(img,channel);
imshow("original",img);
imshow("B",channel[0]);
imshow("G",channel[1]);
imshow("R",channel[2]);

//set blue channel to 0
channel[0] = Mat::zeros(imgrows,imgcols,CV_8UC1);
//merge red and green channels
merge(channel,3,img);
imshow("R_G_merge",img);

waitKey(0);
return 1;
}

二、对摄像头摄入视频帧的RGB彩色通道分离
int main(int argc,char argv[])
{
VideoCapture cap;
capopen(0);

if(!capisOpened())
{
exit(0);
}

capset(CV_CAP_PROP_FRAME_WIDTH,250);
capset(CV_CAP_PROP_FRAME_HEIGHT,250);

cout << "Frame Width: " << capget(CV_CAP_PROP_FRAME_WIDTH) << endl;
cout << "Frame Height: " << capget(CV_CAP_PROP_FRAME_HEIGHT) << endl;

Mat frame;
vector<Mat> rgb;
cap >> frame;

//rgbpush_back( Mat(framerows, framecols, CV_8UC1));
//rgbpush_back( Mat(framerows, framecols, CV_8UC1));
//rgbpush_back( Mat(framerows, framecols, CV_8UC1));
//rgbpush_back( Mat(framerows, framecols, CV_8UC1));

namedWindow("original", 1);
namedWindow("red", 1);
namedWindow("green", 1);
namedWindow("blue", 1);

for(;;)
{
cap >> frame;
imshow("original", frame);
split(frame, rgb);

imshow("red", rgbat(2));
imshow("green", rgbat(1));
imshow("blue", rgbat(0));

if(waitKey(30) >= 0)
break;
}

waitKey(0);
return 1;
}

1split()函数
此函数的作用是将一个图像通道进行分离。
首先看一下split()函数定义:
void split(const Mat& m, vector<Mat>& mv );
参数说明:
第一个参数,const Mat&类型的src,填我们需要进行分离的图像;
第二个参数,vector<Mat>类型的mv,填函数的输出数组或者输出的vector容器,即分离后的图像;
2merge()函数
merge()函数的功能是split()函数的逆向 *** 作,将多个数组合并成一个多通道的数组。
首先看一下merge()函数定义:
void merge(const vector<Mat>& mv, OutputArray dst );
参数说明:
第一个参数,const <Mat>类型的mv,填需要被合并的vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度;说白了就是前面被split()函数分离后的图像通道。
第二个参数,保存为合并后的图像;
#include <opencv2/core/corehpp>
#include <opencv2/highgui/highguihpp>
#include <opencv2/imgproc/imgprochpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
//0定义相关变量
Mat srcImage, newImage; //源图像、通道合并后的图像
Mat srcImage_B, srcImage_G, srcImage_R; //R、G、B各个通道
Mat image_H, image_S, image_V; //H、S、V各个通道
vector<Mat> channels_BGR; //vector<Mat>: 可以理解为存放Mat类型的容器(数组)
vector<Mat> channels_HSV;
//1读取原始图像并检查图像是否读取成功
srcImage = imread("D:\\OutPutResult\\ImageTest\\adogjpg"); //请修改为自己的图像路径
if (srcImageempty())
{
cout << "读取图像有误,请重新输入正确路径!\n";
return -1;
}
imshow("srcImage源图像", srcImage); //在窗口显示源图像

//2对加载的原图像进行通道分离,即把一个3通道图像转换成为3个单通道图像
split(srcImage, channels_BGR);
//0通道为B分量,1通道为G分量,2通道为R分量。因为:RGB色彩空间在opencv中默认通道顺序为BGR!!!
srcImage_B = channels_BGRat(0);
srcImage_G = channels_BGRat(1);
srcImage_R = channels_BGRat(2);
imshow("srcImage_B通道", srcImage_B); //分别显示R,G,B各个通道图像
imshow("srcImage_G通道", srcImage_G);
imshow("srcImage_R通道", srcImage_R);

//3将BGR颜色空间转换为HSV颜色空间
Mat image_hsv;
cvtColor(srcImage, image_hsv, CV_BGR2HSV);
imshow("HSV颜色空间图像", image_hsv);

//4对加载的HSV图像进行通道分离
split(image_hsv, channels_HSV);
//0通道为H分量,1通道为S分量,2通道为V分量
image_H = channels_HSVat(0);
image_S = channels_HSVat(1);
image_V = channels_HSVat(2);
imshow("image_H通道", image_H);//分别显示H,S,V各个通道图像
imshow("image_S通道", image_S);
imshow("image_V通道", image_V);

//5将3个单通道重新合并成一个三通道图像
merge(channels_HSV, newImage);
imshow("将H,S,V通道合并后的图像", newImage);

//6保持等待状态
waitKey(0);
return 0;
}

5程序说明

看到这里,可能有人会问为什么分离出的通道都是黑白灰,而不是红绿蓝?

原因是分离后为单通道,相当于分离通道的同时把其他两个通道填充了相同的数值。比如红色通道,分离出红色通道的同时,绿色和蓝色被填充为和红色相同的数值,这样一来就只有黑白灰了。那么红色体现在哪呢?可以进行观察,会发现原图中颜色越接近红色的地方在红色通道越接近白色。
====================分割线===============

此程序共显示9个窗口。

先将RGB图像通道分离,分别显示R、G、B、单个通道;

后将RGB颜色空间转为HSV空间,将HSV图像通道分离,分别显示H、S、V、单个通道;

最后将H、S、V、单个通道重新合并为3通道图像;
=========================END======================

PS制作分离效果图,作法如下:

新建画布,背景填充黑色,将人物素材拖到画布中,使用橡皮擦工具将脸部之外的部分擦除。

创建新透明画布(20 x 20px),将前景色设为白色,使用1px的铅笔工具对画布左侧和下侧描边

编辑 >> 变换 >> 变形,按下图调整网格层节点。

图层不透明度设为20%。双击网格层打开图层样式窗口,选择外发光,混合模式为“颜色减淡”,不透明度100%,颜色为白色,扩展0,大小5。

创建新图层,使用钢笔工具沿网格选出若干方块,并用黑色填充。

按住Ctrl 键并点击上述黑色方块层获得选区,选择人像层,剪切并粘贴(粘贴后的图层命名为“碎片”),并通过自由变换(Ctrl + T)将其缩小一点后移动到如下位置。

选择碎片层,按住 Alt 键,并同时点击键盘向右方向键(点9次),得到类似立体效果。此时看到图层面板中出现10个碎片层,将除了顶层外的其他碎片层合并,并将合并后的图层命名为“侧边”。双击侧边层,打开图层样式窗口,选择渐变叠加,将不透明度设为80%,角度180,使用#000000 到 #D58761渐变,其他属性取默认值。

利用画笔工具为侧边添加一些纹理效果。

重复执行步骤 6-步骤 8,得到最终效果。

将所有的黑色方块层合并,双击打开图层样式窗口,选择斜面与浮雕,样式为“内斜面”,深度“75%”,大小5px,软化0px,角度0,高度50。高光模式为“滤色”,高光颜色#DCA57E,不透明度100%。 阴影模式“正片叠底”,阴影颜色#000000,不透明度75%。

在碎片层下方创建新图层,使用烟雾笔刷添加烟雾效果。选择碎片层,使用黑色柔角笔刷描绘画布右侧,得到如下渐隐效果。

在人物层上方创建新图层,再次使用钢笔工具随意选出若干方块,并用黑色填充。将图层混合模式设为“柔光”。

*** 作与步骤 12相同,只是填充颜色换成白色。

选择人物层,滤镜 >> 模糊 >> 表面模糊,半径5px,阀值15。在所有图层上方创建调整图层,图层 >> 创建调整图层 >> 色阶,属性设为10,125,244。

最终得到效果图!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13385513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存