小编Sha*_*awn的帖子

opencv矩阵数据是否保证连续?

我知道,opencv矩阵中包含的数据不保证是连续的.为了清楚起见,这是Opencv文档中的一段:

在此输入图像描述

Opencv提供了一个名为isContinuous()的函数来测试给定矩阵的数据是否是连续的.我的问题是

(1)如果我按如下方式创建新矩阵

Mat img = cv::imread(img_name)
Run Code Online (Sandbox Code Playgroud)

img中的数据是否保证是连续的?

(2)我知道通过从现有矩阵借用数据来创建新矩阵将导致不连续的数据

cv::Mat small_mat = large_mat.col(0);
Run Code Online (Sandbox Code Playgroud)

上面的代码通过借用large_mat的第0列来创建一个新的矩阵small_mat,从而导致small_mat中的连续数据.所以问题是,如果我在不借用现有矩阵的数据的情况下创建一个全新的矩阵,那么全新的矩阵是否会有不间断的数据?

(3)以下代码是否保证创建具有连续数据的矩阵?

cv::Mat mat(nRows, nCols, CV_32FC1);
Run Code Online (Sandbox Code Playgroud)

c++ opencv

17
推荐指数
2
解决办法
6738
查看次数

我可以同时锁定多个变量吗?

我问的是关于多线程的问题.

说我有两个全局向量,

std::vector<MyClass1*> vec1 
Run Code Online (Sandbox Code Playgroud)

std::vector<MyClass2*> vec2. 
Run Code Online (Sandbox Code Playgroud)

另外,我总共有4个线程可以访问vec1vec2.我可以编写如下代码吗?

void thread_func()
// this is the function that will be executed by a thread
{
    MyClass1* myObj1 = someFunction1(); 
    MyClass2* myObj2 = someFunction2();

    // I want to push back vec1, then push back vec2 in an atomic way
    pthread_mutex_lock(mutex);
    vec1.push_back(myObj1);
    vec2.push_back(myObj2);
    pthread_mutex_unlock(mutex);
}

for(int i=0; i<4; i++)
{
    pthread_t tid;
    pthread_create(&tid, NULL, thread_func, NULL);
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是,我想在vec1上执行push_back,然后在vec2上执行push_back .

我是新手,我觉得只能用互斥锁锁定一个变量.换句话说,只能在pthread_mutex_lock(mutex)pthread_mutex_unlock(mutex)之间放置vec1.push_back(myObj1)或 …

c++ multithreading pthreads

6
推荐指数
1
解决办法
579
查看次数

一对括在括号中的数字

这是一段代码.任何人都可以解释在括号内包含一对数字意味着什么.(这是用C++编写的.)

    int a = 2, b = 2, c = 3, d = 1;
    if((a,b)<(c,d))
        cout<<"case1"<<endl;
    else
        cout<<"case2";
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
1
解决办法
574
查看次数

浮点数与定点数:Intel I5 CPU上的速度

我有一个C/C++程序,它涉及密集的32位浮点矩阵数学计算,如加法,减法,乘法,除法等.

我可以通过将32位浮点数转换为16位定点数来加速我的程序吗?我可以获得多少速度增益?

目前我正在研究Intel I5 CPU.我正在使用Openblas来执行矩阵计算.我应该如何重新实现openblas函数(如cblas_dgemm)来执行定点计算?

我知道SSE(简单SIMD扩展)一次运行4x32 = 8x16 = 128位数据,即4个32位浮点类型或8个16位定点类型.我想在从32位浮点转换为16位定点后,我的程序会快两倍.

performance sse simd matrix openblas

4
推荐指数
1
解决办法
2237
查看次数

如果我对头文件做了一些小改动,是否需要重新编译第三方库

我有一个第三方图书馆.这个库有一个类.此类将其所有数据成员声明为受保护.因为我需要从我自己的代码访问这个类的数据成员,所以我将"protected"修改为"public".

现在,我可以访问此第三方类的数据成员,而无需重新编译第三方库.

因此,我的结论是"公共","受保护"和"私人"等关键词不会进入编译代码.这些关键字的范围仅限于头文件.我们可以将"private"和"protected"更改为"public"以访问类数据成员.

我的结论是对还是错?请帮忙.

c++

3
推荐指数
2
解决办法
176
查看次数

标签 统计

c++ ×4

matrix ×1

multithreading ×1

openblas ×1

opencv ×1

performance ×1

pthreads ×1

simd ×1

sse ×1