<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AnHongjun的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/AnHongjun</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AnHongjun]]></copyright><item><title><![CDATA[OpenCV模板匹配]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113410693</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113410693</guid><author>AnHongjun</author><pubDate>Sat, 30 Jan 2021 09:00:08 +0800</pubDate><description><![CDATA[res = cv2.matchTemplate(img, template, method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

method：匹配算法

 ### TM_SQDIFF：计算平方不同，计算出来的值越小越相关

 ### TM_CCORR：计算相关性，计算出来的值越大越相关

 ### TM_CCOFFF：计算相关系数，计算出来的值越大越相关

 ### TM_SQDIFF_NORME...]]></description><category></category></item><item><title><![CDATA[OpenCV图像金字塔与轮廓检测]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113405781</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113405781</guid><author>AnHongjun</author><pubDate>Sat, 30 Jan 2021 08:31:07 +0800</pubDate><description><![CDATA[一、高斯金字塔


import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('./cat.jpg', cv2.IMREAD_COLOR)
b, g, r = cv2.split(img)
img = cv2.merge((r, g, b))

pyrup = cv2.pyrUp(img)          #向上采样
pyrdown = cv2.pyrDown(img)      #向下采样

plt.f]]></description><category></category></item><item><title><![CDATA[OpenCV图像边缘检测]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113389779</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113389779</guid><author>AnHongjun</author><pubDate>Fri, 29 Jan 2021 15:50:45 +0800</pubDate><description><![CDATA[一、Canny边缘检测的一般步骤

1.使用高斯滤波器，以平滑图像，滤除噪声；

2.计算图像中每个像素点的梯度强度和方向；

3.应用非极大值抑制，以消除边缘检测带来的杂散效应；

4.应用双阈值检测来确定真实的和潜在的边缘；

5.通过抑制孤立的弱边缘最终完成边缘检测。

二、梯度强度和方向的计算



三、关于非极大值抑制

1.方法一



2.方法二



四、双阈值检测



五、OpenCV接口实现


import cv2
import matplotlib.pyplot as plt
im]]></description><category></category></item><item><title><![CDATA[OpenCV图像梯度计算]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113372887</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113372887</guid><author>AnHongjun</author><pubDate>Fri, 29 Jan 2021 12:28:05 +0800</pubDate><description><![CDATA[一、Sobel算子



二、计算图像梯度


dst = cv2.Sobel(src, ddepth, dx, dy, ksize)

ddepth:图像的深度

dx和dy分别表示水平和竖直方向

ksize是Sobel算子的大小


import cv2
import matplotlib.pyplot as plt

img = cv2.imread('./noisy.jpg', cv2.IMREAD_GRAYSCALE)

#滤波
img = cv2.medianBlur(img, 5)

#计算]]></description><category></category></item><item><title><![CDATA[OpenCV图像阈值操作和平滑处理]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113365279</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113365279</guid><author>AnHongjun</author><pubDate>Fri, 29 Jan 2021 10:33:33 +0800</pubDate><description><![CDATA[一、图像阈值操作


ret, dst = cv2.threshold(src, thresh, maxval, type)


src:输入图，只能输入单通道图，通常来说为灰度图
dst:输出图
thresh:阈值
maxval:当像素超过了阈值（或小于阈值，由type决定），所赋予的值
type:二值化操作的类型，包含以下五种：

### cv2.THRESH_BINARY  超过阈值部分取maxval，否则取0
### cv2.THRESH_BINAEY_INV ...]]></description><category></category></item><item><title><![CDATA[Pytorch搭建神经网络完成监督学习-分类任务]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113360464</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113360464</guid><author>AnHongjun</author><pubDate>Fri, 29 Jan 2021 09:07:27 +0800</pubDate><description><![CDATA[今天玩点相对刺激的，利用神经网络完成非线性四分类任务。

一、创建训练集

为了保证后续过程中产生的随机数都是一致的（方便测试），我们首先种下一颗随机种子。


import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F
import numpy as np

def setup_seed(seed):
    torch.manual_seed(seed)
    torch.cuda.manual_seed_a]]></description><category></category></item><item><title><![CDATA[Pytorch搭建神经网络完成监督学习-回归任务]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113360060</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113360060</guid><author>AnHongjun</author><pubDate>Thu, 28 Jan 2021 22:38:29 +0800</pubDate><description><![CDATA[一、创建训练集

要实现监督学习训练，我们首先要有训练集(trainning set)。我们用如下方法创建：


import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F
from torch.autograd import Variable

batch_n = 100

#create training-set
x = torch.linspace(-3, 3, batch_n).reshape(batch_]]></description><category></category></item><item><title><![CDATA[OpenCV图像的基本操作]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113357694</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113357694</guid><author>AnHongjun</author><pubDate>Thu, 28 Jan 2021 22:06:43 +0800</pubDate><description><![CDATA[一、图像的截取

把图像当作数组处理即可（宽度, 高度, 通道数)。


import cv2

img = cv2.imread('./cat.jpg', cv2.IMREAD_COLOR)
subimg = img[0:800, 0:800]

cv2.imshow('title', subimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、颜色通道提取与合并

注意opencv中彩图为BGR图像，不是RGB。


import cv2

img = cv2.i]]></description><category></category></item><item><title><![CDATA[OpenCV图像、视频的读取与基本处理]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113357049</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113357049</guid><author>AnHongjun</author><pubDate>Thu, 28 Jan 2021 20:19:44 +0800</pubDate><description><![CDATA[一、图像读取、显示与写出

 关于cv2.imread函数，第二个参数cv2.IMREAD_COLOR表示读取为RGB图像，cv2.IMREAD_GRAYSCALE表示读取为灰度图像


import cv2

def ShowImage(title, img):
    cv2.imshow(title, img)
    cv2.waitKey(0)          #按任意键继续
    cv2.destroyAllWindows()

img = cv2.imread('./cat.jpg'...]]></description><category></category></item><item><title><![CDATA[opencv-python安装与测试]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/113356976</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/113356976</guid><author>AnHongjun</author><pubDate>Thu, 28 Jan 2021 19:51:12 +0800</pubDate><description><![CDATA[本人安装3.4.1.15版本。

避免踩坑，不建议安装4.x版本！


pip install opencv-python==3.4.1.15
pip install opencv-contrib-python==3.4.1.15

python代码测试是否安装成功


import cv2                #引入opencv库

print(cv2.__version__)    #输出cv2版本


...]]></description><category></category></item><item><title><![CDATA[Numpy常用函数汇总]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112394287</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112394287</guid><author>AnHongjun</author><pubDate>Sat, 09 Jan 2021 17:07:15 +0800</pubDate><description><![CDATA[import numpy as np 


#basic attribute
array = np.array([[1, 2, 3], [2, 3, 4]])
print(array)		#print the np.array
print(array.ndim)	#print the dimension of the np.array
print(array.shape)	#print the shape of the np.array
print(array.size)	#print the size .]]></description><category></category></item><item><title><![CDATA[严格次小生成树 洛谷P4180题解]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112237832</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112237832</guid><author>AnHongjun</author><pubDate>Tue, 05 Jan 2021 15:28:50 +0800</pubDate><description><![CDATA[先粘代码，后期更新原理。


#include &lt;cstdio&gt;
#include &lt;cmath&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
using namespace std;

#define MaxN 100005
#define MaxM 300005
#define LogN 20
#define INF 0x7fffffffffffffffLL

int N, M;

struct EDGE{
    i]]></description><category></category></item><item><title><![CDATA[洛谷P1967题解]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112175209</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112175209</guid><author>AnHongjun</author><pubDate>Mon, 04 Jan 2021 14:10:24 +0800</pubDate><description><![CDATA[首先找出图中每个连通分量的最大生成树，然后在树上跑LCA。寻找LCA的时候寻找路径上的最小权值。


#include &lt;cstdio&gt;
#include &lt;cmath&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
using namespace std;

#define MaxN 10005
#define MaxM 50005
#define LogN 20
#define INF 0x7fffffff

int N]]></description><category></category></item><item><title><![CDATA[洛谷P3379题解]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112172408</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112172408</guid><author>AnHongjun</author><pubDate>Mon, 04 Jan 2021 12:36:52 +0800</pubDate><description><![CDATA[树上LCA倍增板子题。


#include &lt;cstdio&gt;
#include &lt;iostream&gt;
using namespace std;

#define MaxN 500005
#define MaxM 500005*2
#define LogN 20

int N, M, S;
int point[MaxN], tot;
int nxt[MaxM], v[MaxM];

int deep[MaxN];
bool flag[MaxN];
int f[MaxN][LogN];]]></description><category></category></item><item><title><![CDATA[矩阵加速计算斐波那契数列]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112133081</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112133081</guid><author>AnHongjun</author><pubDate>Sun, 03 Jan 2021 12:05:18 +0800</pubDate><description><![CDATA[#include &lt;cstdio&gt;
using namespace std;

struct Matrix{
    static const int MOD = 10007;
    int data[2][2];
    Matrix(int data00, int data01, int data10, int data11){
        data[0][0] = data00; data[0][1] = data01;
        data[1][0] = data10; d.]]></description><category></category></item><item><title><![CDATA[洛谷P1991题解]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112114796</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112114796</guid><author>AnHongjun</author><pubDate>Sun, 03 Jan 2021 11:34:03 +0800</pubDate><description><![CDATA[要求最大值最小，不难想到使用二分法。我们每次二分一个“最大的D”，然后将大于D的边舍去，然后看一下去边后的图有多少个连通分量。连通分量的数目就是增配卫星电话的数目。

至于求连通分量数目我们可以使用并查集。


#include &lt;cstdio&gt;
#include &lt;algorithm&gt;
#include &lt;cmath&gt;
using namespace std;

#define MaxP 505

int S, P;
struct NODE{
    double x,]]></description><category></category></item><item><title><![CDATA[洛谷P2872题解]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112099913</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112099913</guid><author>AnHongjun</author><pubDate>Sun, 03 Jan 2021 11:33:35 +0800</pubDate><description><![CDATA[我们假设图G是完全图，预先计算好所有边的权值并加入边集。


for(int i = 1; i&lt;=N; ++i)
        for(int j = i+1; j&lt;=N; ++j){
            edge[++cnt].x = i;
            edge[cnt].y = j;
            edge[cnt].w = cal_dis(i, j);
        }

在读入输入数据已给的M条边时，直接进行并查集合并处理。


 for(int i = 1]]></description><category></category></item><item><title><![CDATA[最小生成树算法总结【洛谷P3366】]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/112094733</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/112094733</guid><author>AnHongjun</author><pubDate>Sat, 02 Jan 2021 14:53:43 +0800</pubDate><description><![CDATA[一、Prim算法

 Prim算法是一种以点集为出发点的最小生成树算法，它将无向图G中所有顶点V分成两个子集A、B。初始时，A中只包含一个随机选取的顶点u，其余顶点属于集合B。每次从集合B中选取一个顶点加入顶点A，该顶点是集合B到集合A中距离最小的一个点。直到V个顶点全部属于A，算法结束。算法时间复杂度O(n^2)。


#define MaxN 5005

int N, M;
int G[MaxN][MaxN];

bool flag[MaxN];
int dis[MaxN];

int Prim(...]]></description><category></category></item><item><title><![CDATA[实测！！论如何在OI赛场上提高程序运行速度]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/83572888</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/83572888</guid><author>AnHongjun</author><pubDate>Sat, 02 Jan 2021 00:28:53 +0800</pubDate><description><![CDATA[实测！！论如何在OI赛场上提高程序运行速度

摘要：其实register、inline和读入优化大多数情况下并没有什么卵用，，

目录：

1.引子

2.实验机基本信息

3.inline关键字测试

4.register关键字测试

5.cin、scanf、快读三种读入方式的比较

6.附：for循环中++i与i++两种写法的速度测试

7.总结



引子：

据说变量前面加个regist...]]></description><category></category></item><item><title><![CDATA[他抛了27亿粒米粒儿近似计算出了圆周率]]></title><link>https://blog.youkuaiyun.com/AnHongjun/article/details/105449775</link><guid>https://blog.youkuaiyun.com/AnHongjun/article/details/105449775</guid><author>AnHongjun</author><pubDate>Sat, 02 Jan 2021 00:13:27 +0800</pubDate><description><![CDATA[他抛了27亿粒米粒儿近似计算出了圆周率

18世纪，法国数学家布丰曾用抛针法计算出了圆周率的近似值。

今天，中国的一个造作男孩抛了27亿粒米粒儿也计算出了圆周率的近似值，他就是博主——AHJ

一、理论基础

布丰的计算方法在本质上是一种概率问题。接受过高中教育的童鞋应该都学习过几何概型。

首先我们在地板上画出一个正方形的区域，并画出其内切圆。



现在我们向这个正方形区域抛一个“米粒儿”，...]]></description><category></category></item></channel></rss>