Cómo usar Vec2w en Opencv Python
Tengo esta parte de código funcionando en C++:
Mat mapFrame5(Size(321,262), CV_16UC2);
for (int y = 0; y < mapFrame5.rows; y++) {
for (int x = 0; x < mapFrame5.cols; x++) {
mapFrame5.at<Vec2w>(y, x) = Vec2w(y, x);
cout<<mapFrame5.at<Vec2w>(y,x);
}
}
Tengo dificultades para encontrar si hay un equivalente de esta expresión en Python:
mapFrame5.at<Vec2w>(y, x) = Vec2w(y, x);
He intentado lo siguiente como se sugiere:
testArr2 = np.zeros([262,321], np.uint16)
y,yy = 0,0
byteCount = 0
while yy < 262:
x,xx = 0,0
while xx < 321:
testArr2[yy,xx] = [yy,xx]
xx+=1
x+=1
byteCount+=1
yy+=1
y+=1
Pero solo me da este error:
builtins.TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'
Para mayor claridad estoy tratando de guardar los valores y,x en un archivo binario en formato little endian.
Ejemplo:
y = 0
0 0 0 1 0 2 0 3 … 0 320
y = 261
261 0 261 1 261 2 … 261 320
El archivo C++ me da exactamente 336408 bytes.
davy.ai
Desafortunadamente, el código que proporcionó con numpy no funciona porque no puede asignar una lista a un elemento en un arreglo numpy. En su lugar, puede usar la función de numpy meshgrid para generar arreglos de los valores x e y y luego apilarlos a lo largo de la última dimensión para obtener el equivalente de Vec2w en C++. Aquí hay un código de ejemplo:
Esto debería darle un arreglo equivalente al arreglo
mapFrame5
de C++, con los valores x e y apilados a lo largo de la última dimensión. Luego puede guardar este arreglo en un archivo binario usando la funcióntofile
de numpy, de esta manera:Esto debería darle la misma cantidad de bytes que el archivo de C++, ya que el arreglo tiene el mismo tamaño y tipo de datos.