matlab 对线路板进行裁剪

news2024/10/6 4:02:37

缺陷图像目前还没有搞定————(无奈)
test1

%Sobel方法
I = imread('ChuanJian0.jpg');
G = rgb2gray(I);
E1 = edge(G, 'sobel');
figure, subplot(2,2,1);
imshow(I);
title('Original Color Image');
subplot(2,2,2);
imshow(E1);
title('Sobel Edge');
 
E2 = edge(G, 'roberts');
subplot(2,2,3);
imshow(E1);
title('Roberts Edge');
 
E3 = edge(G, 'log');
subplot(2,2,4);
imshow(E1);
title('LOG Edge');

% 固定阈值分割
% BW1 = im2bw(G, 220/256);
% 显示结果
% subplot(2,3,4);
% imshow(BW1);
% title('Fixed threshold');
%  
% 自动计算分割阈值
% T = graythresh(G);  
% 自动阈值分割 
% BW2 = im2bw(G, T);
% 显示分割结果
% subplot(2,3,5);
% imshow(BW2);
% title('Auto threshold');

test2

I = imread('ChuanJian0.jpg');
G = rgb2gray(I);
%固定阈值分割
BW1 = im2bw(G, 220/256);
%显示结果
subplot(2,1,1);
imshow(BW1);
title('Fixed threshold');
 
%自动计算分割阈值
T = graythresh(G);  
%自动阈值分割 
BW2 = im2bw(G, T);
%显示分割结果
subplot(2,1,2);
imshow(BW2);
title('Auto threshold');

test3

%图像分割(全局阈值,借助直方图)
clc
clear all
I=rgb2gray(imread('ChuanJian0.jpg'));
figure (1)
imhist(I);
R=I>100;%大于125的地方为白(1),小于为黑(0)
figure(2);
imshow(R);
figure(3);
% 竖值相加
G = sum(R');
plot(G);
xlabel('x');
ylabel('f(x)');
% 进行记录
J = G>mean(G);
disp(mean(G));
figure(4);
plot(J);
xlabel('x');
ylabel('J');
% 进行裁剪

2
1

%图像分割(全局阈值,借助直方图)
clc
clear all
I=rgb2gray(imread('test1.jpeg'));
figure (1);
imshow(I)
% imhist(I);
R=I>125;%大于125的地方为白(1),小于为黑(0)
% figure(2);
% imshow(R);
% 竖值相加
G = sum(R');
% figure(3);
% plot(G);
% xlabel('x');
% ylabel('f(x)');
% title('G的图像');
% 进行裁剪
% 1. 去字
chang = 600;
[m,n] = size(R);
G2 = imcrop(R,[1,1,n,chang]);
% figure(4);
% imshow(G2);
% title('G2的图像');
% 2. 现在分解,对G2进行处理
% 进行记录
G2 = sum(G2);
% figure(5);
% plot(G2);
% xlabel('x');
% ylabel('f(x)');
% title('G22的图像');
J = G2>100;
% figure(6);
% plot(J);
% xlabel('x');
% ylabel('J');
% title('J的图像');
% 计算切割点
QG = [];
j=1;
for i=1:length(J)
    if J(i)==0
        QG(j)=i;
        j = j+1;
    end
end
% figure(7);
% plot(QG);
% xlabel('x');
% ylabel('f(x)');
% title('QG的图像');
% 计算差值,计算板子的宽度
C= zeros(1,length(QG));
for i=1:length(QG)-1
    C(i) = QG(i+1)-QG(i);
end
% figure(8);
% plot(C);
% xlabel('x');
% ylabel('f(x)');
% title('C的图像');
% 所以按照这两个数进行分割
QG = (C>2).*QG;
% figure(9);
% plot(QG);
% xlabel('x');
% ylabel('f(x)');
% title('QG的图像');
% 接下来按照QG中的数字进行分割
fenGe = [];
fenGeOne = [];
a = 1;
for i=1:length(QG)
    if QG(i)>0
        fenGe(a) = QG(i);
        a = a + 1;
    end
end
fenGe
b= 1;
figure();
for i = 1:length(fenGe)-1
    fenGeOne = I(1:chang,fenGe(i):fenGe(i+1));
    subplot(3,4,b);
    imshow(fenGeOne);
    b = b+1;
    if i==length(fenGe)-1
        fenGeOne = I(1:chang,fenGe(i+1):n);
        subplot(3,4,b);
        imshow(fenGeOne);
    end
end

实验3 图像分割

实验学时:8学时。

(一)实验目的
1.利用MATLAB研究图像分割与边缘检测的常用算法原理;
2.掌握MATLAB图像域值分割与边缘检测函数的使用方法;
3.了解边缘检测的算法和用途,比较Sobel、Prewitt、Canny等算子边缘检测的差异;
4.对特定场景的图像进行分割。
(二)实验内容和实验原理
1.利用Matlab图像工具箱的图像分割和边缘检测函数对常规图像进行处理。
2.对绿色植物图像分别使用绿色因子法、HSV颜色空间进行分割;
3.对水果图像在YCbCr颜色空间进行分割;
4.对太阳能电池板进行片定位,并对每个单片进行分割,得到缺陷目标图像。
(三)实验步骤
1.灰度阀值分割
(1)全局阈值分割图像
先将一幅彩色图像转换为灰度图像,显示其直方图,参考直方图中灰度的分布,尝试确定阈值;应反复调节阈值的大小,直至二值化的效果最为满意为止。给图像加上零均值的高斯噪声重复上述过程,注意阈值的选择。
(2)局部阈值分割图像
自选图像,对图进行多阈值分割,注意阈值的选择。
2.边缘检测
(1)使用Roberts 算子的图像分割实验,调入并显示一幅图像*.gif或*.tif;
使用Roberts 算子对图像进行边缘检测处理;Roberts 算子为一对模板,相应的矩阵为:
rh = [0 1;-1 0]; rv = [1 0;0 -1];
这里的rh 为水平Roberts 算子,rv为垂直Roberts 算子。可以显示处理后的水平边界和垂直边界检测结果;
用“欧几里德距离”方式计算梯度的模,显示检测结果;对于检测结果进行二值化处理,并显示处理结果。
(2)使用Prewitt 算子的图像分割,过程同(1)中的全部步骤。
(3)使用Sobel 算子的图像分割,过程同(1)中的全部步骤。
(4)使用Canny算子进行图像分割,过程同(1)中的全部步骤。
3.对绿色植物图像分别使用绿色因子法、HSV颜色空间进行分割;
(1)绿色因子法步骤:
 对RGB图像进行通道分离;
 对每个通道进行归一化;
 计算超绿因子;
 将超绿因子矩阵转换为灰度图像;
 对超绿因子灰度图像进行阈值分割。
(2)基于HSV的绿色植物分割步骤:
 将RGB图像转换为HSV图像;
 对HSV图像进行通道分离;
 确定绿色植物的H范围;
 将H分量中范围外的数据置0;
 对处理后的H分量进行阈值分割。
4.对水果图像在YCbCr颜色空间进行分割;
5.对太阳能电池板进行片定位,并对每个单片进行分割,得到缺陷目标图像。
 对片进行定位
 获取每个单片的子图像
 对各个单片子图像进行图像分割,得到缺陷目标图像。
(四)实验报告要求
1.描述上述图像处理的算法;
2.列出上述图像处理的程序;
3.记录并分析实验结果;
4.撰写心得体会。

对绿色植物图像分别使用绿色因子法、HSV颜色空间进行分割;

绿色植物分割图

%超绿特征分割
%先用最大类间方差法自动计算最佳阈值T,然后计算超绿分量ExG=2G-R-B,大于等于T,赋值为255,反之赋值为0
clear all;
clc;
image = imread('test2.JPG');
image = im2double(image); %图像运算不能用uint8类型,会发生溢出现象,要转成double类型
R = image(:,:,1);
G = image(:,:,2);
B = image(:,:,3);
ExG = 2*G-R-B;
[m,n] = size(ExG);
T = graythresh(ExG);%graythresh函数是使用OTSU(大津)算法返回输出最佳阈值的算法。
h = ExG;
for i = 1:m
    for j= 1:n 
        if h(i,j) >= T
            h(i,j)=255;
        else h(i,j)=0;
        end
    end
end
subplot(131),imshow(image),title('原始图片');
subplot(132),imshow(ExG),title('超绿灰度化')
subplot(133),imshow(h),title('超绿分割二值图')

自己写的

clc
clear all
I=imread('test2.JPG');
figure (1);
imshow(I)
%%R通道
R = I(:,:,1);
figure (2);
imshow(R);
title('R通道');
imhist(R);
%%G通道
G = I(:,:,2);
figure (3);
imshow(G);
title('G通道');
imhist(G);
%%B通道
B = I(:,:,3);
figure (4);
imshow(B);
title('B通道');
imhist(B);

这里是进行HSV与RGB转换

clc
clear all
I=imread('test2.JPG');
figure (1);
imshow(I)
RGB = I;
HSV=rgb2hsv(RGB);%%表示将RGB图像转换为HSV图像。
figure();
imshow(HSV);
title('HSV图像');

基于HSV的绿色植物分割步骤:

拼接:

close all;clear all;clc;
I=imread('test.jpeg');%读入图片
% figure,imshow(I);
I_h=rgb2hsv(I);%RGB转hsv
[height,width,c]=size(I);
h = I_h(:,:,1);
s = I_h(:,:,2);
v = I_h(:,:,3);
figure,
subplot(2,2,1),imshow(I_h);title('hsv格式图');
subplot(2,2,2),imshow(h);title('h');
subplot(2,2,3),imshow(s);title('s');
subplot(2,2,4),imshow(v);title('v');
% figure,
% imhist(h);
% % 得到阈值 0.5
% one = h>0;
% figure,
% imshow(one);

for i=1:height
    for j=1:width
        h=I_h(i,j,1);
        s=I_h(i,j,2);
        v=I_h(i,j,3);
%         通过将h通道颜色值特定范围内饱和度设为0,保留范围外颜色值
        if 0.38<h || h<0.15
            I_h(i,j,2)=0;
        end
    end
end
I_r=hsv2rgb(I_h);
figure, imshow(I_r);

找的代码

clear all;
clc;
flag = imread('test.jpeg'); % 读取图像       
figure;
imshow(flag); % 展示图像     
% 将图像的rgb色彩空间转化至hsv色彩空间
flag_hsv = rgb2hsv(flag);      
% 创建一个白色图像,将特定颜色提取到此处
flag_new = 255*ones(size(flag));
% 将该图像转至hsv色彩空间
flag_new_hsv = rgb2hsv(flag_new);
% 找出图像中绿色的像素
[row, col] = ind2sub(size(flag_hsv),find(flag_hsv(:,:,1)>0.12...
& flag_hsv(:,:,1)< 0.6 & flag_hsv(:,:,2)>0.16 & flag_hsv(:,:,3)>0.18));
% 将图像中的绿色像素复制到刚才新建的白色图像中
for i = 1 : length(row)
    flag_new_hsv(row(i),col(i),:) = flag_hsv(row(i),col(i),:);
end
% 将提取出来的绿色,转化至rgb空间,进行展示
flag_green = hsv2rgb(flag_new_hsv);
figure
imshow(flag_green)

4. 对水果图像在YCbCr颜色空间进行分割

000

% I = imread("test2.jpeg");
% % I = rgb2gray(I);
% YCBCR = rgb2ycbcr(RGB);
% imshow(YCBCR),title('YCBCR');

clc,clear,close all;
f=imread('test2.jpeg');
imshow(f);
fy=rgb2ycbcr(f);
cr=fy(:,:,3);
figure,imshow(cr);
% figure();imhist(cr);
cr(cr<100|cr>132)=0;
cr(cr~=0)=255;
% figure,imshow(cr);
bw=imbinarize(cr);
% figure,imshow(bw);
bw=imfill(bw,'holes');
% figure,imshow(bw);

bwao=bwareaopen(bw,500);
figure,imshow(bwao);

[r,c]=find(bwao);
resual=f(min(r):max(r),min(c):max(c),:);
figure,imshow(resual);


5. 边缘检测

clc;clear all;
img = imread('test.png');
figure;
img = rgb2gray(img);
imshow(img),title("原图像");
[ROW,COL] = size(img);
img = double(img);
new_img = zeros(ROW,COL); %新建画布
%定义robert算子
roberts_x = [1,0;0,-1];
roberts_y = [0,-1;1,0];
for i = 1:ROW - 1
    for j = 1:COL - 1
        funBox = img(i:i+1,j:j+1);
        G_x = roberts_x .* funBox;
        G_x = abs(sum(G_x(:)));
        G_y = roberts_y .* funBox;
        G_y = abs(sum(G_y(:)));
        roberts_xy  = G_x * 0.5 + G_y * 0.5;
        new_img(i,j) = roberts_xy;
    end
end
figure(2);
imshow(new_img/255),title("robert算子的图像");
% 定义laplace算子
laplace = [0,1,0;1,-4,1;0,1,0];
for i = 1:ROW - 2
    for j = 1:COL - 2
        funBox = img(i:i+2,j:j+2);
        G = laplace .* funBox;
        G = abs(sum(G(:)));
        new_img(i+1,j+1) = G;
    end
end
figure(3)
imshow(new_img/255),title("laplace算子的图像");
%定义sobel算子
sobel_x = [-1,0,1;-2,0,2;-1,0,1];
sobel_y = [-1,-2,-1;0,0,0;1,2,1];
for i = 1:ROW - 2
    for j = 1:COL - 2
        funBox = img(i:i+2,j:j+2);
        G_x = sobel_x .* funBox;
        G_x = abs(sum(G_x(:)));
        G_y = sobel_y .* funBox;
        G_y = abs(sum(G_y(:)));
        sobelxy  = G_x * 0.5 + G_y * 0.5;
        new_img(i+1,j+1) = sobelxy;
    end
end
figure(4);
imshow(new_img/255),title("sobel的图像");
%定义Prewitt算子
sobel_x = [-1,0,1;-1,0,1;-1,0,1];
sobel_y = [-1,-1,-1;0,0,0;1,1,1];
for i = 1:ROW - 2
    for j = 1:COL - 2
        funBox = img(i:i+2,j:j+2);
        G_x = sobel_x .* funBox;
        G_x = abs(sum(G_x(:)));
        G_y = sobel_y .* funBox;
        G_y = abs(sum(G_y(:)));
        sobelxy  = G_x * 0.5 + G_y * 0.5;
        new_img(i+1,j+1) = sobelxy;
    end
end
figure(5);
imshow(new_img/255),title("Prewitt的图像");

function test(I_in)
    figure(1),subplot(121),imshow(I_in),title('原图');
    [row,col] = size(I_in);
    I=double(I_in);
    I(:, size(I_in, 2) + 1) = 195;
    I(size(I_in, 1) + 1, :) = 195;

    g = zeros(row,col);
    g_x=zeros(row,col);  % 水平方向
    g_y=zeros(row,col);  % 垂直方向

    for i=1:row
        for j=1:col
            x=abs(I(i+1,j+1)-I(i,j));
            y=abs(I(i+1,j)-I(i,j+1));
            sum=x+y;
            g(i,j) = sum;
            g_x(i,j)=x;
            g_y(i,j)=y;
        end
    end


    NumPixel = zeros(1,row);  % 建立一个256列的行向量,以统计各灰度级的像素个数
    for i = 1 : row
        for j = 1 : col
            k = g(i,j);  % k是像素点(i,j)的灰度值
            NumPixel(k+1) = NumPixel(k+1) + 1;  % 对应灰度值像素点数量加1 
        end
    end

    figure(2),bar(NumPixel);  % 灰度图像的直方图
    figure(1),subplot(122),imshow(g,[]),title('卷积结果');

    I2=g;
    for i = 1 : row
        for j = 1 : col
            if I2(i,j) < 80
                I2(i,j) = 1;
            else
                I2(i,j) = 0;
            end
        end
    end


    figure(3),subplot(121),imshow(g_x,[]),title('水平边界检测结果');
    figure(3),subplot(122),imshow(g_y,[]),title('垂直边界检测结果');
    figure,imshow(I2),title('二值化图像');
end
%图像分割(全局阈值,借助直方图)
clc
clear all
I=rgb2gray(imread('test.jpeg'));
figure (1);
imshow(I)
% imhist(I);
R=I>125;%大于125的地方为白(1),小于为黑(0)
% figure(2);
% imshow(R);
% 竖值相加
G = sum(R');
% figure(3);
% plot(G);
% xlabel('x');
% ylabel('f(x)');
% title('G的图像');
% 进行裁剪
% 1. 去字
chang = 600;
[m,n] = size(R);
G2 = imcrop(R,[1,1,n,chang]);
% figure(4);
% imshow(G2);
% title('G2的图像');
% 2. 现在分解,对G2进行处理
% 进行记录
G2 = sum(G2);
% figure(5);
% plot(G2);
% xlabel('x');
% ylabel('f(x)');
% title('G22的图像');
J = G2>100;
% figure(6);
% plot(J);
% xlabel('x');
% ylabel('J');
% title('J的图像');
% 计算切割点
QG = [];
j=1;
for i=1:length(J)
    if J(i)==0
        QG(j)=i;
        j = j+1;
    end
end
% figure(7);
% plot(QG);
% xlabel('x');
% ylabel('f(x)');
% title('QG的图像');
% 计算差值,计算板子的宽度
C= zeros(1,length(QG));
for i=1:length(QG)-1
    C(i) = QG(i+1)-QG(i);
end
% figure(8);
% plot(C);
% xlabel('x');
% ylabel('f(x)');
% title('C的图像');
% 所以按照这两个数进行分割
QG = (C>2).*QG;
% figure(9);
% plot(QG);
% xlabel('x');
% ylabel('f(x)');
% title('QG的图像');
% 接下来按照QG中的数字进行分割
fenGe = [];
fenGeOne = [];
a = 1;
for i=1:length(QG)
    if QG(i)>0
        fenGe(a) = QG(i);
        a = a + 1;
    end
end
% fenGe
b= 1;
figure();
for i = 1:length(fenGe)-1
    fenGeOne = I(1:chang,fenGe(i):fenGe(i+1));
    subplot(3,4,b);
    imshow(fenGeOne);
    b = b+1;
    if i==1
        c = fenGeOne;
    end
    if i==2
        d = fenGeOne;
    end
    if i==length(fenGe)-1
        fenGeOne = I(1:chang,fenGe(i+1):n);
        subplot(3,4,b);
        e=fenGeOne;
        imshow(fenGeOne);
    end
end
c = c(1:255,1:255);
d = d(1:255,1:255);
e = e(1:255,1:255);
figure();imshow(c);
figure();imshow(d);
figure();imshow(e);
a = corr2(c,d);
disp(a);
b = corr2(d,e);
disp(b);

知识点:

  1. 转换hsv和RGB图像
ImgHSV = rgb2hsv(ImgRGB);
ImgRGB = hsv2rgb(ImgHSV);

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

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

相关文章

使用PyTorch构建神经网络,并计算参数Params

文章目录 使用PyTorch构建神经网络&#xff0c;并计算参数Params举例计算具有全连接层的神经网络的参数数量计算卷积神经网络的参数数量Params计算过程 总结 使用PyTorch构建神经网络&#xff0c;并计算参数Params 在深度学习中&#xff0c;模型的参数数量是一个非常重要的指标…

零基础学Java好找工作吗?好程序员告诉你入行Java有多惨?

为什么小源建议普通背景、零基础的大专生、本科生去学java编程呢&#xff1f; 因为真的香啊&#xff01;小白容易上岸&#xff0c;而且工作3年的话&#xff0c;基本年薪就能到50w&#xff08;只要你工作后也一直不断努力学习&#xff09;。java岗位属于技术岗&#xff0c;没有任…

Android进阶:Activity的生命周期和启动模式

Activity的生命周期和启动模式 作为Android四大组件之中存在感最强的组件&#xff0c;Activity应该是我们在学习Android中第一个碰到的新概念。在日常开发过程中我们肯定会用到Activity&#xff0c;但是关于Activity的一些细节问题运行机制我们可能还有一些不清楚的问题。今天…

调用百度文心AI作画API实现中文-图像跨模态生成

作者介绍 乔冠华&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c;2020级硕士研究生&#xff0c;张宏伟人工智能课题组。 研究方向&#xff1a;机器视觉与人工智能。 电子邮件&#xff1a;1078914066qq.com 一&#xff0e;文心AI作画API介绍 1. 文心AI作画 文…

全开源ChatGPT聊天机器人商业版源码/支持魔改/完全开放源代码

&#x1f388; 限时活动领体验会员&#xff1a;可下载程序网创项目短视频素材 &#x1f388; ☑️ 品牌&#xff1a;ChatGPT ☑️ 语言&#xff1a;PHP ☑️ 类型&#xff1a;ChatGPT ☑️ 支持&#xff1a;PCWAP &#x1f389; 有需要的朋友记得关赞评&#xff0c;需要的底部获…

C++哈希

目录 一、认识哈希表 1.unordered_set和unordered_map 2.哈希表的概念 二、闭散列哈希表的实现 1.底层本质 &#xff08;1&#xff09;哈希表的存储结构 &#xff08;2&#xff09;元素的插入与查找 &#xff08;3&#xff09;哈希冲突 &#xff08;4&#xff09;负载…

深入浅出C++ ——线程库

文章目录 线程库thread类的简单介绍线程函数参数原子性操作库 mutex的种类std::mutexstd::recursive_mutexstd::timed_mutexstd::recursive_timed_mutex lock_guard与unique_locklock_guardunique_lock condition_variable 线程库 thread类的简单介绍 在C11之前&#xff0c;涉…

“广东省五一劳动奖章”获得者卫晓欣:“她”力量让新兴技术更获认可

近日&#xff0c;2023年广东省庆祝“五一”国际劳动节暨五一劳动奖表彰大会顺利召开&#xff0c;大会表彰了2023年全国和省五一劳动奖、工人先锋号代表。 其中&#xff0c;来自FISCO BCOS开源社区产业应用合作伙伴广电运通的创新中心总监卫晓欣&#xff0c;凭借在区块链领域的…

分布式锁Redisson对于(不可重入、不可重试、超时释放、主从一致性)四个问题的应对

文章目录 1 Redisson介绍2 Redisson快速入门3 Redisson可重入锁原理4 Redisson锁重试和WatchDog机制5 Redisson锁的MutiLock原理 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff…

Ai作图可控性演进——从SD到MJ

背景 Ai作图从Diffusion模型开始&#xff0c;作图进入稳步发展快车道。然后用过diffusion系列作图的同学对产图稳定性&#xff0c;以及可控性都会颇有微词。diffusion系列作图方法在宏观层面上确实能够比较好的做出看上去还不错的图。然后当你细抠细节时候&#xff0c;发现这东…

远程服务器搭建jupyter lab并在本地访问

1、安装jupyter pip install jupyter 可以直接在base环境下安装 2、配置jupyter 2.1 密钥生成 进入python交互模式&#xff0c;输入以下代码&#xff1a; from jupyter_server.auth import passwd passwd()然后输入密码&#xff0c;得到一串密钥&#xff0c;保存一下 2.2…

Java多线程入门到精通学习大全?了解几种线程池的基本原理、代码示例!(第五篇:线程池的学习)

本文介绍了Java中三种常用的线程池&#xff1a;FixedThreadPool、CachedThreadPool和ScheduledThreadPool&#xff0c;分别介绍了它们的原理、代码示例以及使用注意事项。FixedThreadPool适用于并发量固定的场景&#xff0c;CachedThreadPool适用于执行时间短的任务&#xff0c…

Linux C/C++后台开发面试重点知识

Linux C/C后台开发面试重点知识 文章转载自个人博客: Linux C/C后台开发面试重点知识 查看目录 一、C 面试重点 本篇主要是关于 C 语言本身&#xff0c;如果是整个后台技术栈的学习路线&#xff0c;可以看这篇文章: Linux C 后台开发学习路线 对于 C 后台开发面试来说&…

27岁转行学云计算值得吗?能就业不?

27岁转行学云计算值得吗&#xff1f;能就业不&#xff1f; 首先&#xff0c;云计算当然值得转行了&#xff0c;如此肯定的观点&#xff0c;应该没有人会反对吧&#xff0c;尤其是对IT行业的现状以及就业市场有所了解的人。如果你对这一点有所怀疑也很正常&#xff0c;只要通过各…

Spring Boot集成ShardingSphere分片利器 AutoTable (一)—— 简单体验 | Spring Cloud 45

一、背景 Sharding是 Apache ShardingSphere 的核心特性&#xff0c;也是 ShardingSphere 最被人们熟知的一项能力。在过去&#xff0c;用户若需要进行分库分表&#xff0c;一种典型的实施流程&#xff08;不含数据迁移&#xff09;如下&#xff1a; 用户需要准确的理解每一张…

详解快速排序的类型和优化

详解快速排序的优化 前言快排的多种写法霍尔法实现快排代码部分 挖坑法思路讲解代码部分 双指针法思路讲解代码部分 针对排序数类型的优化针对接近或已经有序数列和逆序数列三数取中代码实现 随机数 针对数字中重复度较高的数三路划分思路讲解代码部分 根据递归的特点进行优化插…

JSP招投标管理系统myeclipse开发mysql数据库WEB结构java编程

一、源码特点 JSP 招投标管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 JSP招投标管理系统myeclipse开发mysql数据库W 二、功能介绍 主要功能&#xff1a; …

BPMN2.0 任务-接收任务手动任务

接收任务 接收任务是一个简单的任务,它等待特定消息的到来。 当流程执行到接收任务时,流程状态将提交给持久性存储。流程将保持这种等待状态,直到流程引擎接收到特定的消息,这将触发接收任务之外流程的继续进行。 接收任务用左上角有一个消息图标的标准BPMN 2.0任务(圆角…

C++新特性总结

&#xff08;智能指针&#xff0c;一些关键字&#xff0c;自动类型推导auto&#xff0c;右值引用移动语义完美转发&#xff0c;列表初始化&#xff0c;std::function & std::bind & lambda表达式使回调更方便&#xff0c;c11关于并发引入了好多好东西&#xff0c;有&am…

vivado工程转换到quartus下联合modelsim仿真

vivado用习惯了&#xff0c;现在快速换到quartus下仿真测试。写一个操作文档&#xff0c;以fpga实现pcm编码为例。 目录 一、建立工程 1、准备源码和仿真文件 2、新建工程 3、加载源文件 4、选择器件 5、仿真器配置 6、工程信息 二、配置工程 7、设置顶层文件 8、配置…