我有深度图像,我使用3D CAD数据生成.该深度图像也可以从诸如Kinect或立体相机的深度成像传感器获取.所以基本上它是在成像视图中可见的点的深度图.换句话说,它是来自特定视图的对象的分段点云.
我想确定(估计也将)每个点的表面法线,然后找到该点的切线平面.
我怎样才能做到这一点?我做了一些研究并找到了一些技术,但对它们并不了解(我无法实现).更重要的是我如何在Matlab或OpenCV中做到这一点?我无法使用surfnorm命令设法做到这一点.AFAIK它需要单个表面,我的深度图像中有部分表面.
这是一个示例深度图像.
[编辑]
我想要做的是,在每个点获得表面法线后,我将在这些点处创建切线平面.然后使用这些切平面通过将相邻点的距离之和与切平面相乘来确定该点是否来自平坦区域.
[编辑]
OpenCV cv::Mat类型有什么区别?
更具体地讲,之间有什么区别CV_64F和CV_64FC1或CV_64FC2?当我创建一个cv::Mat具有double值的对象时,我应该使用哪一个?
我有一个应用程序,我需要运行多线程但我希望它只使用计算机的一个核心,好像我的计算机有单核(我知道多核应用程序在单核计算机上的行为),虽然它不是.
该应用程序将部署在客户计算机(Windows XP和7)上,我不希望我的应用程序使用多个核心.可以这样做吗?它取决于编程语言吗?或者所有线程管理都留给操作系统?
提前致谢.
我有一个不包含XFA数据的PDF.我想要做的是,以编程方式创建一个XFA表单模板(不是使用Adobe LiveCycle或类似的程序),然后将其嵌入到PDF中,然后填写XFA表单.
这可能吗?或者我必须使用Adobe LiveCycle?
编辑
http://en.wikipedia.org/wiki/XFA#Profiles在此Wiki链接中说明如下:
XFAF(XFA前景)子集 - (在XFA 2.5中引入) - 一种表单,其中XFA表单的每个页面都覆盖PDF背景.它只能用于静态XFA表单.此体系结构仅使用XFA的子集.它可以打包在常规PDF文档中,也可以打包为带有嵌入式PDF的独立XDP文件.在XFAF中,每个XFA字段对应于PDF交互字段(AcroForm字段).
所以我相信,我的要求是可能的,但目前我不知道如何......
我目前正在使用不使用NDK的OpenCV(OpenCV4Android)库(没有C或C++代码).但是,armeabi,armeabi-v7a,mips和x86都有.so文件.如果我在项目中包含所有这些,则应用程序大小为30mb,而如果我只包含1,则应用程序大小仅为9mb.如果我尝试在没有包含该设备的架构的.so文件的设备上运行应用程序,它会崩溃,而如果我有它的.so文件,它就可以工作.
因此,我想将多个APK发布到不同的设备架构以减少文件大小.从我所看到的,这只能在Application.mk文件中完成,但我的库没有.是否有其他方法可以针对不同的Android架构?
我正在尝试使用JNI从C++将Mat对象传递给Java.我查看了OpenCV Java dll的源代码,我使用的是OpenCV使用的完全相同的代码.当我想从OpenCV Java API创建的Java中释放一个对象时,它工作正常,但是当我想要发布一个我使用相同代码创建的对象时,我的应用程序崩溃了.MatMat
我正在发布我正在使用的代码.如果有人有想法,我将非常感激.提前致谢.
[编辑]
另外我想补充一点,如果你看看代码块3和4中的函数定义在Java和C++中有相同的函数名,readImage0,但是在C++中的1和2中,函数名的名字上有一个额外的1 ,imread_11和imread_1,这两者是如何联系起来的?也许有一个我不知道的额外层.
[/编辑]
[EDIT2]
在Windows 7 VC11上运行,尝试使用OpenCV 2.4.5和2.4.8
[/ EDIT2]
1.这是Mat在OpenCV源中传递对象的C++代码:
JNIEXPORT jlong JNICALL Java_org_opencv_highgui_Highgui_imread_11 (JNIEnv*, jclass, jstring);
JNIEXPORT jlong JNICALL Java_org_opencv_highgui_Highgui_imread_11
(JNIEnv* env, jclass , jstring filename)
{
static const char method_name[] = "highgui::imread_11()";
try {
LOGD("%s", method_name);
const char* utf_filename = env->GetStringUTFChars(filename, 0); std::string n_filename( utf_filename ? utf_filename : "" ); …Run Code Online (Sandbox Code Playgroud) 我认为Apple已经改变了iTunes Connect的布局以及添加应用程序内购买的位置,因此这是我添加应用程序内购买的屏幕,但是它告诉我从应用程序的应用程序内购买部分中选择它点击提交.

我再次假定以下区域,我无法看到任何提交应用程序内购买的地方: 
根据这个问题和它的答案,应该有一个应用内购买部分,但它缺少.
PS这将是该应用程序的第一个提交.
我有一个图像,我在图像上放置一个矩形.然后我旋转图像.如何在旋转的图像上获得矩形的中心?
或者我可以以某种方式旋转矩形以放置旋转图像?我认为在这种情况下,旋转必须沿着与用于旋转图像的点相同的点进行.
这是放置在其上的矩形的图像.

这是旋转的图像.

这是我用来旋转图像的代码:
cv::Mat frame, frameRotated;
frame = cv::imread("lena.png");
cv::Rect rect(225,250,150,150);
cv::rectangle(frame, rect, cv::Scalar(0,0,255),2);
int theta = 30;
double radians = theta * PI / 180.0;
double sin = abs(std::sin(radians));
double cos = abs(std::cos(radians));
int newWidth = (int) (frame.cols * cos + frame.rows * sin);
int newHeight = (int) (frame.cols * sin + frame.rows * cos);
cv::Mat targetMat(cv::Size(newWidth, newHeight), frame.type());
int offsetX = (newWidth - frame.cols) / 2;
int offsetY = (newHeight - frame.rows) / 2;
frame.copyTo(targetMat.rowRange(offsetY, offsetY …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式调整我的显示器亮度.经过一些研究,我想出了这个链接,并编写了以下代码(主要是从其他链接复制粘贴,一个引导我).
#include "Windows.h"
#include "WinUser.h"
#include "PhysicalMonitorEnumerationAPI.h"
#include "HighLevelMonitorConfigurationAPI.h"
#include <strsafe.h>
void ShowError(LPTSTR lpszFunction);
int main()
{
HMONITOR hMonitor = NULL;
DWORD cPhysicalMonitors;
LPPHYSICAL_MONITOR pPhysicalMonitors = NULL;
HWND hWnd = GetDesktopWindow();
// Get the monitor handle.
hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTOPRIMARY);
// Get the number of physical monitors.
BOOL bSuccess = GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &cPhysicalMonitors);
if (bSuccess)
{
// Allocate the array of PHYSICAL_MONITOR structures.
pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(cPhysicalMonitors* sizeof(PHYSICAL_MONITOR));
if (pPhysicalMonitors != NULL)
{
// Get the array.
bSuccess = GetPhysicalMonitorsFromHMONITOR( …Run Code Online (Sandbox Code Playgroud) 我使用的是第三方C++ API为我的项目,它有返回值的功能与类型std::vector<int>,std::vector<bool>,std::vector<double>.我需要将这些类型的变量传递给Java.所以我使用JNI和我的功能与类型的返回值jintArray,jbooleanArray,jdoubleArray.
我正在使用以下代码转换double类型:
std::vector<double> data;
//fill data
jdouble *outArray = &data[0];
jdoubleArray outJNIArray = (*env).NewDoubleArray(data.size()); // allocate
if (NULL == outJNIArray) return NULL;
(*env).SetDoubleArrayRegion(outJNIArray, 0 , data.size(), outArray); // copy
return outJNIArray;
Run Code Online (Sandbox Code Playgroud)
我对这个代码块没问题.但是,当我想要为类型int和bool类型执行此操作时,存在以下问题:
std::vector<int> data;
//fill data
jint *outArray = &data[0];
Run Code Online (Sandbox Code Playgroud)
和
std::vector<bool> data;
//fill data
jboolean *outArray = &data[0];
Run Code Online (Sandbox Code Playgroud)
问题是定义jint和jboolean,因为:
typedef long jint;
typedef unsigned char jboolean; …Run Code Online (Sandbox Code Playgroud)