Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV透视校正和裁剪_C++_Ios_Objective C_Opencv - Fatal编程技术网

C++ OpenCV透视校正和裁剪

C++ OpenCV透视校正和裁剪,c++,ios,objective-c,opencv,C++,Ios,Objective C,Opencv,我目前正在尝试更正显示矩形的随机拍摄图像的透视图 透视校正工作正常,但我也想将图像裁剪到目标。Si我尝试通过透视矩阵cv::Mat变换目标的给定轮廓,并根据结果进行裁剪 我的方法当前在标记行崩溃,出现以下错误 OpenCV Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0

我目前正在尝试更正显示矩形的随机拍摄图像的透视图

透视校正工作正常,但我也想将图像裁剪到目标。Si我尝试通过透视矩阵cv::Mat变换目标的给定轮廓,并根据结果进行裁剪

我的方法当前在标记行崩溃,出现以下错误

OpenCV Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0)) in create, file /Volumes/build-storage/build/master_iOS-mac/opencv/modules/core/src/matrix.cpp, line 2430
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Volumes/build-storage/build/master_iOS-mac/opencv/modules/core/src/matrix.cpp:2430: error: (-215) mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0) in function create
代码

我真的不知道错误消息告诉我什么,所以我希望这里的人能帮助我解决这个崩溃

下一个问题

我对代码做了一点修改,点向量上的变换动作现在起作用了,但我无法通过这些变换点来裁剪垫子

std::vector<cv::Point2f> transformedPoints;

cv::Matx23f matrix = *transmtx.clone().ptr();

cv::transform(quad_pts, transformedPoints, matrix);

// Crash
cv::Mat cropped = transformed(cv::boundingRect(transformedPoints));
错误消息说

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /Volumes/build-storage/build/master_iOS-mac/opencv/modules/core/src/matrix.cpp, line 522
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Volumes/build-storage/build/master_iOS-mac/opencv/modules/core/src/matrix.cpp:522: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat
嗯,我直接用memcpy转换向量到Mat。也许你可以在变换部分试试

 memcpy(Mat.data, vector.data(), vector.size()*sizeof(Point));
只要你得到了轮廓的掩模矩阵,我想你可以使用逐位来修正你的目标结果


顺便说一句,我无法解释opencv的错误声明,因为我从未理解过它。

谢谢你的建议!我现在可以对点向量进行变换,但是裁剪图像失败了。我也添加了新的错误。我不能再解决了,因为我不熟悉3d透视的东西。但是,我无法检查有关转换的任何信息。但我发现的是在变换中,当矩阵.cols==quad_pts.channels,dstI=m.srcI时。否则,dstI=m[srcI;1]。所以,我想你可以先检查矩阵列并输入矩阵通道号。它应该能帮助你解决这个错误。
 memcpy(Mat.data, vector.data(), vector.size()*sizeof(Point));