程序性能检测及优化
本章节内容是博主网上收集的,参考文档如下:
直接下载:OpenCV-Python-Tutorial-中文版.pdf(P47 检测程序效率)
在线预览
当前系列所有demo下载地址:
https://github.com/GaoRenBao/OpenCv4-Demo
不同编程语言对应的OpenCv版本以及开发环境信息如下:
语言 | OpenCv版本 | IDE |
C# | OpenCvSharp4.4.8.0.20230708 | Visual Studio 2022 |
C++ | OpenCv-4.5.5-vc14_vc15 | Visual Studio 2022 |
Python | OpenCv-Python (4.6.0.66) | PyCharm Community Edition 2022.1.3 |
本章节,主要是通过计算程序运行时间、开启程序优化功能、合理使用Nump等三种方式来提高程序效率。详细的请参考pdf文档。
C#版本运行代码如下:
using OpenCvSharp;
using System;
namespace demo
{
internal class Program
{
static void Main(string[] args)
{
demo1();
demo2();
Console.Read();
}
/// <summary>
/// 使用getTickCount方法来计算程序运行时间。
/// </summary>
static void demo1()
{
Mat img1 = Cv2.ImRead("../../../images/ml.png");
var e1 = Cv2.GetTickCount();
for (int i = 5; i < 49; i += 2)
Cv2.MedianBlur(img1, img1, i);
var e2 = Cv2.GetTickCount();
var t = (e2 - e1) / Cv2.GetTickFrequency(); // 时钟频率 或者 每秒钟的时钟数
Console.WriteLine(t);
}
/// <summary>
/// 使用函数cv2.useOptimized() 来查看优化是否开启了,使用函数cv2.setUseOptimized()来开启优化
/// </summary>
static void demo2()
{
Console.WriteLine(Cv2.UseOptimized());
Cv2.SetUseOptimized(false);
Console.WriteLine(Cv2.UseOptimized());
}
}
}
C++版本运行代码如下:
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
// 使用getTickCount方法来计算程序运行时间。
void demo1()
{
Mat img1 = imread("../images/ml.png");
int64 e1 = getTickCount();
for (int i = 5; i < 49; i += 2)
medianBlur(img1, img1, i);
int64 e2 = getTickCount();
double t = (e2 - e1) / getTickFrequency(); // 时钟频率 或者 每秒钟的时钟数
printf("%f", t);
}
// 使用函数cv2.useOptimized() 来查看优化是否开启了,使用函数cv2.setUseOptimized()来开启优化
void demo2()
{
printf("%d\n", useOptimized());
setUseOptimized(false);
printf("%d\n", useOptimized());
}
void main()
{
demo1();
demo2();
}
Python版本运行代码如下:
import cv2
"""
# 通过使用opencv中的getTickCount方法,来计算程序运行时间
"""
def demo1():
img1 = cv2.imread('../images/ml.png')
e1 = cv2.getTickCount()
for i in range(5, 49, 2):
img1 = cv2.medianBlur(img1, i)
e2 = cv2.getTickCount()
t = (e2 - e1) / cv2.getTickFrequency() # 时钟频率 或者 每秒钟的时钟数
print(t)
"""
OpenCV中的默认优化在编译时优化是默认开启的。
因此OpenCV的就是优化后的代码,如果你把优化关闭了,就只能执行低效的代码了。
你可以使用函数cv2.useOptimized() 来查看优化是否开启了,使用函数cv2.setUseOptimized()来开启优化。
"""
def demo2():
print(cv2.useOptimized())
cv2.setUseOptimized(False)
print(cv2.useOptimized())
if __name__ == '__main__':
demo1()
demo2()