opencv如何把一个矩阵不同列分离开_c-在OpenCV中将某些行从一个矩阵复制到另一......

本文通过一个具体的示例对比了在不同编译选项下使用OpenCV的性能差异。实验结果显示,在启用优化的情况下编译可以显著提高程序的运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于our discussion in chat,您未在启用优化的情况下进行编译.如果这样做,您将看到明显的性能提升.另外,请确保您要链接到OpenCV的发行版本.

在未启用优化的情况下,我测量了以下示例的执行时间:

main.cpp中

#include

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char **argv)

{

const int num_rows = 32678;

const int num_cols = 10;

const int index_size = 24700;

const int num_runs = 1000;

const int seed = 42;

std::vector index_vec(num_rows);

// fill index with sequence

std::iota (index_vec.begin(), index_vec.end(), 0);

// randomize sequence

std::random_device rd;

std::mt19937 g(rd());

g.seed(seed);

std::shuffle(index_vec.begin(), index_vec.end(), g);

// trunkate index

index_vec.resize(index_size);

cv::Mat w2c(num_rows, num_cols, CV_32F);

// copy

cv::Mat out(index_size, w2c.cols, w2c.type());

auto start = std::chrono::high_resolution_clock::now();

for (int k = 0; k

{

for (int i = 0; i < index_size; ++i)

{

w2c.row(index_vec[i]).copyTo(out.row(i));

}

}

auto end = std::chrono::high_resolution_clock::now();

auto duration = std::chrono::duration_cast<:chrono::microseconds>(end - start);

std::cout << duration.count()/num_runs << " microseconds" << std::endl;

return 0;

}

的CMakeLists.txt

project(copy)

find_package(OpenCV REQUIRED)

add_executable(copy main.cpp)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

include_directories(${OpenCV_INCLUDE_DIRS})

target_link_libraries(copy ${OpenCV_LIBS})

无需优化即可编译运行

cmake . -DCMAKE_BUILD_TYPE=DEBUG

make

./copy

3924 microseconds

编译并优化运行

cmake . -DCMAKE_BUILD_TYPE=RELEASE

make

./copy

2664 microseconds

我对这些进行了测试

>英特尔酷睿i7-4600U CPU

> Ubuntu 14.04(x64)

> GCC 4.8.2

> OpenCV 3.0.0(发行版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值