在浏览OpenCV源代码时,我注意到对于不止一次的迭代,它只是创建一个更大的内核并进行一次迭代.
所以我的问题是如果我们采用3x3大小的SQUARE结构元素并在三次迭代中扩展/侵蚀它,它将与用9x9内核扩展/侵蚀它一次相同.
if( iterations > 1 && countNonZero(kernel) == kernel.rows*kernel.cols )
{
anchor = Point(anchor.x*iterations, anchor.y*iterations);
kernel = getStructuringElement(MORPH_RECT,
Size(ksize.width + (iterations-1)*(ksize.width-1),
ksize.height + (iterations-1)*(ksize.height-1)),
anchor);
iterations = 1;
}
Run Code Online (Sandbox Code Playgroud) 当我使用_mm_packus_epi16时,小于零的值将变为零,但高于127的数字将变为负值.
根据这个链接,它应该是无符号饱和度 http://msdn.microsoft.com/en-us/library/07ad1wx4%28v=vs.90%29.aspx
但没有发生
有什么建议?
码:
__m128i result, resultHi, resultLo;
//processing.....
result = _mm_packus_epi16(resultLo, resultHi);
Run Code Online (Sandbox Code Playgroud) 我已经初始化MLMultiArray使用initWithDataPointer,如下面的代码所示:
float count = 512 * 384;
double *tempBuffer = malloc(count * sizeof(double));
NSError *error = NULL;
NSArray *shape = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:512],[NSNumber numberWithInt:384], nil];
NSArray *stride = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:1],[NSNumber numberWithInt:1], nil];
MLMultiArray *mlMultiArray = [[MLMultiArray alloc] initWithDataPointer:tempBuffer
shape:shape
dataType:MLMultiArrayDataTypeDouble
strides:stride
deallocator:^(void * _Nonnull bytes) { free(bytes); }
error:&error];
Run Code Online (Sandbox Code Playgroud)
根据MLMultiArray此链接中提到的文档,subscript需要使用它来访问元素.
如果我按照显示的方式访问元素,是否正确?
NSNumber *val = [mlMultiArray objectForKeyedSubscript:[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:1],[NSNumber numberWithInt:1], nil]];
Run Code Online (Sandbox Code Playgroud) machine-learning objective-c multidimensional-array ios coreml