Tag: 图像处理

JNI- unpinned primitve数组错误

我想在图像处理中实现反转效果。 我在java端解码颜色通道,我将2D数组传递给C端,我反转(255值)然后我返回一个处理过的2D数组。 这是我的C代码: #include #include #include #include JNIEXPORT jobjectArray JNICALL Java_com_example_invert_MainActivity_inv (JNIEnv *env, jobject obj, jobjectArray arr, jint w, jint h) { double a[w][h][3]; int i,j,k; double x = 0; ///////////////////READING THE INPUT ARRAY//////////////////////// jsize dim1 = (*env)->GetArrayLength(env, arr); for (i=0; iGetObjectArrayElement(env, arr, i); int dim2 = (*env)->GetArrayLength(env, line1); jdouble *pos1 = (*env)->GetDoubleArrayElements(env, line1, 0); […]

如何在OpenCV中创建描述符矩阵

如何在OpenCV中创建一个描述符,该描述符可以与OpenCV中的一个DescriptorMatcher一起使用,方式如下。 cv::BFMatcher matcher( cv::NORM_L2, false ); std::vector matches; matcher.match( descriptors_1, descriptors_2, matches ); 我已经有了以下描述符类。 如何转换或创建可与DescriptorMatcher一起使用的新矩阵。 最好是BFMatcher。 class Descriptor { public: float lxi, lyi; // Location of descriptor vector feature; Descriptor() { } Descriptor(float x, float y, vector const& f) { lxi = x; lyi = y; feature = f; } };

带有内核的二维卷积,该内核不是中心发起的

我想用高斯核进行图像的2D卷积,高斯核不是由等式给出的中心起源: h(x-x’,y-y’)= exp( – ((x-x’)^ 2 +(y-y’))/ 2 * sigma) 可以说内核的中心是(1,1)而不是(0,0)。 我应该如何更改以下代码以生成内核和卷积? int krowhalf=krow/2, kcolhalf=kcol/2; int sigma=1 // sum is for normalization float sum = 0.0; // generate kernel for (int x = -krowhalf; x <= krowhalf; x++) { for(int y = -kcolhalf; y <= kcolhalf; y++) { r = sqrtl((x-1)*(x-1) + (y-1)*(y-1)); gKernel[x + […]

OpenCv在Visual Studio中未解决外部符号错误

我已链接到我想要使用的库,并将头文件添加到我的项目中。 并且代码在红色波形中没有显示任何错误,但是当我尝试运行它时,它给出了以下错误: Error 1 error LNK2001: unresolved external symbol _cvDestroyWindow C:\Users\Jos\documents\visual studio 2010\Projects\ocv\ocv\opcv.obj ocv Error 2 error LNK2001: unresolved external symbol _cvWaitKey C:\Users\Jos\documents\visual studio 2010\Projects\ocv\ocv\opcv.obj ocv Error 3 error LNK2001: unresolved external symbol _cvNamedWindow C:\Users\Jos\documents\visual studio 2010\Projects\ocv\ocv\opcv.obj ocv Error 4 error LNK2001: unresolved external symbol _cvLoadImage C:\Users\Jos\documents\visual studio 2010\Projects\ocv\ocv\opcv.obj ocv Error 5 error LNK2001: unresolved […]

OpenCV – 如何在C中转换cpp代码

我不擅长cpp,我需要有这个代码的ac接口: #include #include #include int main(int argc, char* argv[]) { cv::Mat img = cv::imread(argv[1]); // Convert RGB Mat to GRAY cv::Mat gray; cv::cvtColor(img, gray, CV_BGR2GRAY); // Store the set of points in the image before assembling the bounding box std::vector points; cv::Mat_::iterator it = gray.begin(); cv::Mat_::iterator end = gray.end(); for (; it != end; ++it) […]

跟踪并替换实时video流中的标记

我想创建一个程序,可以检测实时video流中的标记,用我之前拍摄的图片的一部分替换标记。 我正在使用ARtoolKit识别标记。 首先,我将抓取video帧并将其保存为jpg文件,然后我将放置标记并让video识别标记。 程序识别出标记但按键盘键后,我将调用一个函数hode marker(),它接收jpg和标记的coordenates。 也许通过使用ImageMagick,我将裁剪图像到coordenates脚。 然后我可能会创建一个opengl平面,其中的图像具有纹理。 需要一些帮助来解决这个问题。

图像曲线拟合的多项式最小二乘法

我试图将曲线拟合到图像中的多个像素,以便我可以对其形状进行进一步处理。 有没有人知道如何在C / ++中实现最小二乘法,最好使用以下参数:x数组,ay数组和答案数组(答案数组的长度应该告诉需要计算多少系数)?

查找图像等高线质心

我试图像这样计算图像质心: // Calculate centroid double signedArea = 0.0; sskp_point centroid; for(int i=0;i<numPoints;i++) { double a = (points[i].x*points[(i+1)%numPoints].y)-(points[(i+1)%numPoints].x*points[i].y); signedArea += a; centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a; centroid.y += (points[i].y*points[(i+1)%numPoints].y)*a; printf("points[%d] = { %f, %f }\n",i,points[i].x,points[i].y); } signedArea /= 2.0; centroid.x /= (6*signedArea); centroid.y /= (6*signedArea); printf("centroid = { %f, %f }\n",centroid.x,centroid.y); 我已经从算法中对此进行了调整,但它给了我错误的结果 ,有人能告诉我这个改编有什么问题吗?

使用线程,我应该如何处理理想情况下按顺序发生的事情?

我有一个图像生成器,可以从线程运行中受益。 我打算使用POSIX线程,并编写了一些基于https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal的模拟代码来测试。 在预期的程序中,当使用GUI时,我希望生成的行逐个从上到下显示(图像生成可能非常慢)。 还应注意,线程中生成的数据不是实际的图像数据。 读取线程数据并将其转换为RGB数据并放入实际的图像缓冲区中。 并且在GUI内,可以在图像生成期间改变线程生成的数据被转换为RGB数据的方式而不停止图像生成。 但是,线程调度程序无法保证线程将以我想要的顺序运行,这不幸地使得线程生成的数据的转换更加棘手,这意味着保持数组保持bool值以指示哪些行的不合需要的解决方案完成。 我应该怎么处理这个? 目前我有一个观察者线程来报告图像何时完成(实际上应该是一个进度条,但我还没有那么远,它使用pthread_cond_wait )。 和几个渲染线程一起做while(next_line()); next_line()执行互斥锁定,并在递增它并解锁互斥锁之前获取img_next_line的值。 它然后呈现该行并执行互斥锁(与第一个不同)以获得line_done对高度的检查,如果完成则发出信号,解锁并在完成时返回0或如果不完成则返回1。

将图像拆分为64×64块

我只是想知道如何将像素arrays(R,G,B,A,R,G,B,A,R,G,B,A等)分成64×64块。 我自己尝试过几种方法,但它们看起来都过于复杂,而且有点过于混乱。 我有以下变量(显然填充了信息): int nWidth, nHeight; unsigned char *pImage; 基本上我想要调用的每个块: void ProcessChunk(int x, int y, int width, int height) 您可能想知道为什么处理函数有宽度和高度参数,但如果图像不能被64整除,则图像边缘(右侧和底部)会有较小的块。 请参阅此图片以更好地理解我的意思(红色块是具有<64 宽度或高度参数的块)。 提前致谢。