OpenGL is using the last texture loaded - c++

Edit:
Ive narrowed it down to this: It seems like if I do the below in my function, and then in the renderer function never call glBindTexture again it will still render... the textures...
NM->data = stbi_load ( FileBuf , &NM->width , &NM->height , &NM->bit , 0 );
//glGenTextures ( 1 , &NM->texture [ 0 ] ); // ** OFF **
//glBindTexture ( GL_TEXTURE_2D, NM->texture [ 0 ] ); // ** OFF **
//glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR ); // ** Enableing This Will Render White (no texture)
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR ); // ** Enableing This Will Render the texture for both objects *** SUPER WEIRD ***
// *** ALSO *** I dont ever call glBindTexture Again after this but still the object is being textured ***
glTexImage2D ( GL_TEXTURE_2D , 0 , GL_RGBA , NM->width , NM->width , 0 , GL_RGBA , GL_UNSIGNED_BYTE , NM->data );
stbi_image_free ( NM->data );
I must not be understanding something, or I have a big error in my code.
I am just trying to get WaveFront objects with materials loaded, and rendered. With that said, Im just trying to piece together some code to get a better understanding of how everything works so I can go back and reprogram everything. (I am on windows)
I can load .objects from files and even load textures... Problem is, the last texture loaded is used for all objects....
here it glIntercept for loading the images...
glGenTextures(1,05331C10)
glBindTexture(GL_TEXTURE_2D,1)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,05733040)
glGenTextures(1,05332780)
glBindTexture(GL_TEXTURE_2D,2)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,0573D040)
.. From:
NM->MapUsed = true;
sscanf ( coord [ i ]->c_str() , "map_Kd %s" , NM->map_Kd );
char FileBuf [ 256 ] = { 0x0 };
sprintf ( FileBuf , "C:\\OpenGL\\Debug\\%s" , NM->map_Kd );
NM->data = stbi_load ( FileBuf , &NM->width , &NM->height , &NM->bit , 0 );
glGenTextures ( 1 , &NM->texture );
glBindTexture ( GL_TEXTURE_2D, NM->texture );
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_NEAREST );
glTexImage2D ( GL_TEXTURE_2D , 0 , GL_RGBA , NM->width , NM->height , 0 , GL_RGBA , GL_UNSIGNED_BYTE , NM->data );
stbi_image_free ( NM->data );
The above code is how I am loading the texture. NM is in a vector array in VectorMaterialLibrary, and that is in ObjectLoader vector...
void Renderer() {
updatecam();
// all My Objects
for ( int i = 0 ; i < ObjectLoader.size() ; i++ ) {
sObjectLoader *TempObject = ObjectLoader [ i ];
if ( TempObject->MTLFile ) {
for ( int z = 0 ; z < TempObject->VectorMaterialLibrary.size() ; z++ ) {
sMaterialLibrary *TempMaterial = TempObject->VectorMaterialLibrary [ z ];
if ( strcmp ( TempMaterial->newmtl , TempObject->usemtl ) == 0 ) {
if ( TempMaterial->MapUsed ) {
glBindTexture ( GL_TEXTURE_2D, TempMaterial->texture ); // *** This Dings 1/2 respectively ***
}
break;
}
}
}
for ( int z = 0 ; z < TempObject->_3f.size() ; z++ ) {
s3f *Temp3f = TempObject->_3f [ z ];
if ( Temp3f->GL_TYPE == GL_QUADS ) {
glBegin ( GL_QUADS );
if ( Temp3f->boolvn ) {
glNormal3f ( Temp3f->vn [ 0 ] , Temp3f->vn [ 1 ] , Temp3f->vn [ 2 ] );
}
if ( Temp3f->boolv ) {
if ( Temp3f->boolvt ) glTexCoord2f ( Temp3f->vt [ 0 ] , Temp3f->vt [ 1 ] );
glVertex3f ( Temp3f->v [ 0 ] , Temp3f->v [ 1 ] , Temp3f->v [ 2 ] );
if ( Temp3f->boolvt ) glTexCoord2f ( Temp3f->vt [ 2 ] , Temp3f->vt [ 3 ] );
glVertex3f ( Temp3f->v [ 3 ] , Temp3f->v [ 4 ] , Temp3f->v [ 5 ] );
if ( Temp3f->boolvt ) glTexCoord2f ( Temp3f->vt [ 4 ] , Temp3f->vt [ 5 ] );
glVertex3f ( Temp3f->v [ 6 ] , Temp3f->v [ 7 ] , Temp3f->v [ 8 ] );
if ( Temp3f->boolvt ) glTexCoord2f ( Temp3f->vt [ 6 ] , Temp3f->vt [ 7 ] );
glVertex3f ( Temp3f->v [ 9 ] , Temp3f->v [ 10 ] , Temp3f->v [ 11 ] );
}
glEnd();
} else {
glBegin ( GL_TRIANGLES );
if ( Temp3f->boolvn ) {
glNormal3f ( Temp3f->vn [ 0 ] , Temp3f->vn [ 1 ] , Temp3f->vn [ 2 ] );
}
if ( Temp3f->boolv ) {
if ( Temp3f->boolvt ) glTexCoord2f ( Temp3f->vt [ 0 ] , Temp3f->vt [ 1 ] );
glVertex3f ( Temp3f->v [ 0 ] , Temp3f->v [ 1 ] , Temp3f->v [ 2 ] );
if ( Temp3f->boolvt ) glTexCoord2f ( Temp3f->vt [ 2 ] , Temp3f->vt [ 3 ] );
glVertex3f ( Temp3f->v [ 3 ] , Temp3f->v [ 4 ] , Temp3f->v [ 5 ] );
if ( Temp3f->boolvt ) glTexCoord2f ( Temp3f->vt [ 4 ] , Temp3f->vt [ 5 ] );
glVertex3f ( Temp3f->v [ 6 ] , Temp3f->v [ 7 ] , Temp3f->v [ 8 ] );
}
glEnd();
}
}
}
}
Also, the glintercept for the render (took the last image1 call and the start of image2...)
glBegin(GL_TRIANGLES) Textures[ (0,1) ]
glNormal3f(0.000000,0.000000,-1.000000)
glTexCoord2f(1.000000,0.000000)
glVertex3f(1.892851,-0.950534,-3.331728)
glTexCoord2f(1.000000,1.000000)
glVertex3f(-0.107149,-0.950534,-3.331728)
glTexCoord2f(0.000000,1.000000)
glVertex3f(-0.107149,1.049466,-3.331728)
glEnd()
glBindTexture(GL_TEXTURE_2D,2)
glBegin(GL_TRIANGLES) Textures[ (0,2) ]
glNormal3f(0.000000,-1.000000,-0.000000)
glTexCoord2f(0.000000,0.000000)
glVertex3f(1.892851,-0.950534,-3.331728)
glTexCoord2f(1.000000,0.000000)
glVertex3f(1.892851,-0.950534,-1.331729)
glTexCoord2f(0.000000,1.000000)
glVertex3f(-0.107149,-0.950534,-3.331728)
glEnd()
Im wondering where I went wrong. I really just want this to work so I can recode the framework from scratch again.
If you need further code, I can post it, but I dont want a big wall!!!
// Edit, manually doing the following.. bad
// I only have 2 objects with this test, and 2 materials...
if ( testing ) {
glGenTextures ( 2 , Gtextures ); // ********Global
testing = false;
NM->data = stbi_load ( FileBuf , &NM->width , &NM->height , &NM->bit , 0 );
glBindTexture ( GL_TEXTURE_2D, Gtextures[0] );
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_NEAREST );
glTexImage2D ( GL_TEXTURE_2D , 0 , GL_RGBA , NM->width , NM->height , 0 , GL_RGBA , GL_UNSIGNED_BYTE , NM->data );
stbi_image_free ( NM->data );
} else {
NM->data = stbi_load ( FileBuf , &NM->width , &NM->height , &NM->bit , 0 );
glBindTexture ( GL_TEXTURE_2D, Gtextures[1] );
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_NEAREST );
glTexImage2D ( GL_TEXTURE_2D , 0 , GL_RGBA , NM->width , NM->height , 0 , GL_RGBA , GL_UNSIGNED_BYTE , NM->data );
stbi_image_free ( NM->data );
}
**
for ( int z = 0 ; z < TempObject->VectorMaterialLibrary.size() ; z++ ) {
sMaterialLibrary *TempMaterial = TempObject->VectorMaterialLibrary [ z ];
if ( strcmp ( TempMaterial->newmtl , TempObject->usemtl ) == 0 ) {
if ( TempMaterial->MapUsed ) {
//mbci ( "Changing Texture" , i );
//mbci ( "Gtextures [ i ]" , Gtextures [ i ] );
glBindTexture ( GL_TEXTURE_2D, Gtextures [ i ] ); // ** I only have 2 objects so this works for loading the 2 textures...
//glBindTexture ( GL_TEXTURE_2D, TempMaterial->texture );
}
break;
}
}
But the object is STILL the same texture...
Here is a picture of something I am rendering. Notice everything is the same color... The two cubes in the middle should be two different colors, and the other objects are also taking the same texture... here are the two textures (scaled down ofc)
What I See http://i.stack.imgur.com/s1NXn.png ** No Idea **
Cube UV1 http://i.stack.imgur.com/s44Tb.png ** This is loaded first**
Cube UV2 http://i.stack.imgur.com/8KXdo.png ** This is loaded last **

I hate to do this, but after a couple days debugging and going over my OpenGL booklets I have answered my own question.
The problem with my code was based on the .obj format and how I am ordering the faces. In .obj format each .obj is incremented... example:
OBJECT ONE
f 5/1/1 6/2/1 1/3/1
f 6/1/2 7/2/2 2/3/2
f 7/1/3 8/2/3 3/3/3
f 8/1/4 5/2/4 4/3/4
f 1/1/5 2/2/5 4/3/5
f 8/1/6 7/2/6 5/3/6
f 6/2/1 2/4/1 1/3/1
f 7/2/2 3/4/2 2/3/2
f 8/2/3 4/4/3 3/3/3
f 5/2/4 1/4/4 4/3/4
f 2/2/5 3/4/5 4/3/5
f 7/2/6 6/4/6 5/3/6
OBJECT TWO
f 9/5/7 10/6/7 12/7/7
f 13/5/8 16/6/8 14/7/8
f 9/5/9 13/6/9 10/7/9
f 10/5/10 14/6/10 11/7/10
f 11/5/11 15/6/11 12/7/11
f 13/5/12 9/6/12 16/7/12
f 10/6/7 11/8/7 12/7/7
f 16/6/8 15/8/8 14/7/8
f 13/6/13 14/8/13 10/7/13
f 14/6/10 15/8/10 11/7/10
f 15/6/11 16/8/11 12/7/11
f 9/6/12 12/8/12 16/7/12
How I was storing the Vertex/VertexTexture/VertexNormals, were correct, but my loop was starting from 0 on the second object, meaning I was actually recreating the first objects all over again, thus it applied the last texture...
To anyone else: Please be aware of how your program is storing and reading things.
A couple days of work with only a single line of code changed to make it functional... yippie.
It would be nice if there were a way to make sure blender did not do this...

Related

PowerBI percentage by count of another column

How do I calculate the percentage of values in column A from the count of column B?
Or the percentage of non-blank values from count of all values (blank and not)?
I have a column with unique IDs and a 4 columns with values, and I want to see the 4 columns together in a bar chart which I can do with count.
ID
A
B
C
D
12345
1
3
12346
1
2
3
4
12347
3
4
12348
3
4
With count it would show as A=2, B=1, C=4, D=3.
In the percentage I'm looking for it would show as A=50%, B=25%, C=100%, D=75%.
Thanks!
Maya
Achievable with following measures
_a =
DIVIDE (
CALCULATE ( COUNT ( tbl[A] ), ALL ( tbl[ID] ) ),
CALCULATE ( COUNT ( tbl[ID] ), ALL ( tbl[ID] ) )
)
_b =
DIVIDE (
CALCULATE ( COUNT ( tbl[B] ), ALL ( tbl[ID] ) ),
CALCULATE ( COUNT ( tbl[ID] ), ALL ( tbl[ID] ) )
)
_c =
DIVIDE (
CALCULATE ( COUNT ( tbl[C] ), ALL ( tbl[ID] ) ),
CALCULATE ( COUNT ( tbl[ID] ), ALL ( tbl[ID] ) )
)
_d =
DIVIDE (
CALCULATE ( COUNT ( tbl[D] ), ALL ( tbl[ID] ) ),
CALCULATE ( COUNT ( tbl[ID] ), ALL ( tbl[ID] ) )
)
Try this approach:
Create 4 formulas
A% = CONCATENATE(FORMAT((CALCULATE(COUNT(Sheet5[A]),ALLNOBLANKROW(Sheet5[A]))/COUNTROWS(ALL(Sheet5)))*100,"") , "%")
B% = CONCATENATE(FORMAT((CALCULATE(COUNT(Sheet5[B]),ALLNOBLANKROW(Sheet5[B]))/COUNTROWS(ALL(Sheet5)))*100,"") , "%")
C% = CONCATENATE(FORMAT((CALCULATE(COUNT(Sheet5[C]),ALLNOBLANKROW(Sheet5[C]))/COUNTROWS(ALL(Sheet5)))*100,"") , "%")
D% = CONCATENATE(FORMAT((CALCULATE(COUNT(Sheet5[D]),ALLNOBLANKROW(Sheet5[D]))/COUNTROWS(ALL(Sheet5)))*100,"") , "%")
End result is:

Write the elements of an array to file where each element is on its own line in Fortran

I wrote some code to print out the elements of a 3d-array where each element of the array is printed to a new line on screen. That worked (see output below).
Can anyone help me write a format statement that can produce the same thing in a file? (i.e. using WRITE(*,1200) and 1200 FORMAT() etc)?
Here is my code:
PROGRAM test_3d_array
IMPLICIT NONE
integer :: matrix(3,3,3), i, j, k ! three dimensional real array
integer :: CORE, CON, ALPHA
CORE = 3
CON = 3
ALPHA = 3
!assigning some values to the array matrix
do i=1,ALPHA
do j = 1,CORE
do k = 1,CON
matrix(i, j, k) = i+j+k
end do
end do
end do
!display the values
do i=1,ALPHA
do j = 1, CORE
do k=1,CON
WRITE(*,*) "MATRIX (", i, ",", j, ",", k, ") = ", matrix(i,j,k)
end do
end do
end do
END PROGRAM test_3d_array
Here is the screen output that I want to reproduce in the file:
MATRIX ( 1 , 1 , 1 ) = 3
MATRIX ( 1 , 1 , 2 ) = 4
MATRIX ( 1 , 1 , 3 ) = 5
MATRIX ( 1 , 2 , 1 ) = 4
MATRIX ( 1 , 2 , 2 ) = 5
MATRIX ( 1 , 2 , 3 ) = 6
MATRIX ( 1 , 3 , 1 ) = 5
MATRIX ( 1 , 3 , 2 ) = 6
MATRIX ( 1 , 3 , 3 ) = 7
MATRIX ( 2 , 1 , 1 ) = 4
MATRIX ( 2 , 1 , 2 ) = 5
MATRIX ( 2 , 1 , 3 ) = 6
MATRIX ( 2 , 2 , 1 ) = 5
MATRIX ( 2 , 2 , 2 ) = 6
MATRIX ( 2 , 2 , 3 ) = 7
MATRIX ( 2 , 3 , 1 ) = 6
MATRIX ( 2 , 3 , 2 ) = 7
MATRIX ( 2 , 3 , 3 ) = 8
MATRIX ( 3 , 1 , 1 ) = 5
MATRIX ( 3 , 1 , 2 ) = 6
MATRIX ( 3 , 1 , 3 ) = 7
MATRIX ( 3 , 2 , 1 ) = 6
MATRIX ( 3 , 2 , 2 ) = 7
MATRIX ( 3 , 2 , 3 ) = 8
MATRIX ( 3 , 3 , 1 ) = 7
MATRIX ( 3 , 3 , 2 ) = 8
MATRIX ( 3 , 3 , 3 ) = 9

Sed is replacing the start instead of appending to end

I am trying to modify a CSV file to append to the lines the value A. My conditional regex is ,$ where $ is the last character.
My sed 's/,$/,A/' does not return any changes.
However doing sed 's/$/########/' replaces the first N characters of each line with my replacement string.
Example:
user#HOST:/loc/yearly_files$ head merged19.csv
1900-01-01 09:00, 2084, DCNN, DLY3208, 1, 310, 1011, , , , , , , , 5, , , , , , , , , , , , , , , , , , , , , 1.1, , 0, , , , , , , , , , , , , 1, , , , , , , , 1, , 1, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , D, , D, , , , , 79, A, ,
1900-01-01 09:00, 3197, DCNN, DLY3208, 1, 449, 1001, , , , , , , , 4, , , , , , , , , , , , , , , , , , , , , 4.7, , 4.3, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 93.6, A, ,
1900-01-01 09:00, 4813, DCNN, DLY3208, 1, 653, 1001, , , , , , , , 4, , , , , , , , , , , , , , , , , , , , , 2.3, , 1.7, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 89.2, A, ,
1900-01-01 09:00, 4967, DCNN, DLY3208, 1, 687, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 3.2, , 2.8, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 93, A, ,
1900-01-01 09:00, 5399, DCNN, DLY3208, 1, 778, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 5.8, , 5.7, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 98.5, A, ,
1900-01-01 09:00, 6950, DCNN, DLY3208, 1, 1047, 1011, , , , , , , , 6, , , , , , , , , , , , , , , , , , , , , 6.1, , 5.1, , , , , , , , 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , , , , , , H, , , , B, , B, , , , , 84.8, A, ,
1900-01-01 09:00, 7384, DCNN, DLY3208, 1, 1136, 1001, , , , , , , , 4, , , , , , , , , , , , , , , , , , , , , 2.3, , 1.7, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 89.2, A, ,
1900-01-01 21:00, 2084, DCNN, DLY3208, 1, 310, 1011, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , -.6, , -.6, , , , , , , , , , , , , 1, , , , , , , , 1, , 1, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , D, , D, , , , , 99.3, A, ,
1900-01-01 21:00, 3197, DCNN, DLY3208, 1, 449, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 5.7, , 5.6, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 98.5, A, ,
1900-01-01 21:00, 4967, DCNN, DLY3208, 1, 687, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 5.3, , 4.9, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 93.6, A, ,
user#HOST:/loc/yearly_files$ head merged19.csv | sed "s/$/,NULL/"
,NULL01-01 09:00, 2084, DCNN, DLY3208, 1, 310, 1011, , , , , , , , 5, , , , , , , , , , , , , , , , , , , , , 1.1, , 0, , , , , , , , , , , , , 1, , , , , , , , 1, , 1, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , D, , D, , , , , 79, A, ,
,NULL01-01 09:00, 3197, DCNN, DLY3208, 1, 449, 1001, , , , , , , , 4, , , , , , , , , , , , , , , , , , , , , 4.7, , 4.3, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 93.6, A, ,
,NULL01-01 09:00, 4813, DCNN, DLY3208, 1, 653, 1001, , , , , , , , 4, , , , , , , , , , , , , , , , , , , , , 2.3, , 1.7, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 89.2, A, ,
,NULL01-01 09:00, 4967, DCNN, DLY3208, 1, 687, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 3.2, , 2.8, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 93, A, ,
,NULL01-01 09:00, 5399, DCNN, DLY3208, 1, 778, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 5.8, , 5.7, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 98.5, A, ,
,NULL01-01 09:00, 6950, DCNN, DLY3208, 1, 1047, 1011, , , , , , , , 6, , , , , , , , , , , , , , , , , , , , , 6.1, , 5.1, , , , , , , , 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , , , , , , H, , , , B, , B, , , , , 84.8, A, ,
,NULL01-01 09:00, 7384, DCNN, DLY3208, 1, 1136, 1001, , , , , , , , 4, , , , , , , , , , , , , , , , , , , , , 2.3, , 1.7, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 89.2, A, ,
,NULL01-01 21:00, 2084, DCNN, DLY3208, 1, 310, 1011, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , -.6, , -.6, , , , , , , , , , , , , 1, , , , , , , , 1, , 1, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , D, , D, , , , , 99.3, A, ,
,NULL01-01 21:00, 3197, DCNN, DLY3208, 1, 449, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 5.7, , 5.6, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 98.5, A, ,
,NULL01-01 21:00, 4967, DCNN, DLY3208, 1, 687, 1001, , , , , , , , 8, , , , , , , , , , , , , , , , , , , , , 5.3, , 4.9, , , , , , , , , , , , , 0, , , , , , , , 0, , 0, , , , , , , , , , , , , , , , , , , , , , , , , , , D, , , , B, , B, , , , , 93.6, A, ,
user#HOST:/loc/yearly_files$
The regular expression ,$ matches a comma as the last character of the line. If your delimiter is actually a comma plus a space, then you may have an invisible character there which your regex would not match.
In addition, your NULL experiment appears to indicate that you have \r\n line endings (i.e. your files may have been generated in Windows). You can verify the content of your file using od or hexdump:
$ od -c input.csv | head -18 | tail -4
0000340 , , , , D , , D ,
0000360 , , , , 7 9 , A , ,
0000400 \r \n 1 9 0 0 - 0 1 - 0 1 0 9 :
0000420 0 0 , 3 1 9 7 , D C N N ,
Note the \r \n.
You could remove these using dos2unix which may be available for your Linux distribution, or a GNU sed script like:
$ sed -i 's/\r//' input.csv
or a non-GNU sed script run in bash, like this:
$ sed -i '' -e $'s/\r//' input.csv
or by using the appropriate options in an FTP file transfer. There are some additional options for this here.
Once your file is converted, try simply matching the end of the line, if you're pretty sure you've got the right number of delimiters:
sed 's/$/A/' input.csv
Or even better, if you know that you really want field 103 to be an A:
awk -F, '{$103="A"} 1' OFS=", " input.csv
If you know the .csv file uses \r\n as the EOL character, you can get rid of the \r characters by piping the content through tr -d '\r' before sending it to sed:
head merged19.csv | tr -d '\r' | sed 's/$/,NULL/'
Warning: The tr filter removes all the \r characters present in the file and might break something else in your file structure.
However, if your file contains \r not followed by \n then either you have a file generated using an ancient version of MacOS (prior to version 10, macOS used to use \r as the EOL character) or it is a binary file and using sed to handle it is a bad idea anyway.
A PHP solution to replace the Windows end of lines (\r\n) with Unix end of lines (\n) before passing the input to sed:
head merged19.csv |\
php -r 'while($line=fgets(STDIN)){echo(str_replace("\r\n","\n",$line));}' |\
sed 's/$/,NULL/'
The filter is a small PHP program that reads lines from stdin, replaces the \r\n combination with \n and outputs them to stdout.
It doesn't remove the \r characters embedded in the text in other combinations; there should be none but this script plays safe and doesn't make this assumption.
The command is wrapped on multiple lines (the backslash, \, at the end of line tells bash that the command continues on the next line) because the PHP script is quite long for the format used by SO. You can remove the backslash characters (\) and write everything on a single line.
You might be experiencing a problem with your terminal display.
Try writing the changes to a separate file and see if it is correct then.
head merged19.csv | sed "s/$/,NULL/" > testfile
cat testfileor even try watching it in an editor like:
nano testfile

opencv and c++ visual studio 2012

I have this code it work good.
When video length less than 1 minute and video size its 165 KB
When I change the video with other length 2 minute and size 15 MB OR another one same length with size 5 MB its show to me
project has stop working
this my code
# include "windows.h"
# ifdef _CH_
# pragma package < opencv >
# endif
# include "windows.h"
# ifndef _EiC
# include "cv.h"
# include "cvAux.h"
# include "highgui.h"
# include "cxcore.h"
# include < stdio.h >
# include < ctype.h >
# endif
// x?y?
int getpixel ( IplImage * image , int x , int y , int * h , int * s , int * v ) {
* h = ( uchar ) image -> imageData [ y * image -> widthStep + x * image -> nChannels ] ;
* s = ( uchar ) image -> imageData [ y * image -> widthStep + x * image -> nChannels + 1 ] ;
* v = ( uchar ) image -> imageData [ y * image -> widthStep + x * image -> nChannels + 2 ] ;
return 0 ;
}
//--------------------------------------------------------------------------------
int main ( int argc , char * * argv ) {
CvCapture * capture = cvCaptureFromAVI("a.avi") ;
IplImage * image = 0;
IplImage * HSV = 0 ;
/*
IplImage* img = cvLoadImage("greatwave.png", 1);
Mat mtx(img); // convert IplImage* -> Mat
*/
if ( argc == 1 || ( argc == 2 && strlen ( argv [ 1 ] ) == 1 && isdigit ( argv [ 1 ] [ 0 ] ) ) ) {
//capture = cvCaptureFromCAM ( argc == 2 ? argv [ 1 ] [ 0 ] - '0' : 0 ) ;
}
else if ( argc == 2 ) {
//capture = cvCaptureFromAVI ( argv [ 1 ] ) ;
}
if ( !capture ) {
fprintf ( stderr , "Could not initialize capturing.../n" ) ;
return - 1 ;
}
printf ( "Hot keys: /n" "/tESC - quit the program/n" ) ;
//Normal
cvNamedWindow ( "Normal" , CV_WINDOW_AUTOSIZE ) ;
//Condensation-------------------------------------------------
int DP = 2 ; //
int MP = 2 ; //
int SamplesNum = 300 ; //
CvConDensation * ConDens = cvCreateConDensation ( DP , MP , SamplesNum ) ;
//-----------------------------------------------------------------------
//Condensation-----------------------------------
CvMat * lowerBound ; //
CvMat * upperBound ; //
lowerBound = cvCreateMat ( 2 , 1 , CV_32F ) ;
upperBound = cvCreateMat ( 2 , 1 , CV_32F ) ;
//640*480
cvmSet ( lowerBound , 0 , 0 , 0.0 ) ;
cvmSet ( upperBound , 0 , 0 , 640.0 );
cvmSet ( lowerBound , 1 , 0 , 0.0 ) ;
cvmSet ( upperBound , 1 , 0 , 480.0 ) ;
cvConDensInitSampleSet ( ConDens , lowerBound , upperBound ) ;
//-----------------------------------------------------------------------
//------------------------------
for ( int i = 0 ; i < SamplesNum ; i++ ) {
ConDens -> flSamples [ i ] [ 0 ] += 320.0 ;
ConDens -> flSamples [ i ] [ 1 ] += 240.0 ;
}
//-----------------------------------------------------------------------
//----------------------------
ConDens -> DynamMatr [ 0 ] = 1.0 ;
ConDens->DynamMatr [ 1 ] = 0.0 ;
ConDens -> DynamMatr [ 2 ] = 0.0 ;
ConDens->DynamMatr [ 3 ] = 1.0 ;
//-----------------------------------------------------------------------
for ( ;; ) {
IplImage* frame = 0 ;
int c ;
int X , Y , XX , YY ;
int H , S , V ;
frame = cvQueryFrame ( capture ) ;
if ( !frame ) {
break ;
}
if ( !image ) {
image = cvCreateImage ( cvGetSize ( frame ) , 8 , 3 ) ;
image -> origin = frame -> origin ;
HSV = cvCreateImage ( cvGetSize ( frame ) , 8 , 3 ) ;
HSV -> origin = frame -> origin ;
}
cvCopy ( frame , image , 0 ) ;
cvCvtColor ( image , HSV , CV_BGR2HSV ) ;
//?---------------------------------------------------
for ( int i = 0 ; i < SamplesNum ; i++ ) {
X = ( int ) ConDens -> flSamples [ i ] [ 0 ] ;
Y = ( int ) ConDens -> flSamples [ i ] [ 1 ] ;
if ( X >= 0 && X <= 640 && Y >= 0 && Y <= 480 ) { //
getpixel ( HSV , X , Y , &H , &S , & V ) ;
if ( H <= 19 && S >= 48 ) { // //H<=19 S>=48
cvCircle ( image , cvPoint ( X , Y ) , 4 , CV_RGB ( 255 , 0 , 0 ) , 1 ) ;
ConDens -> flConfidence [ i ] = 1.0 ;
}
else {
ConDens -> flConfidence [ i ] = 0.0 ;
}
}
else {
ConDens -> flConfidence [ i ] = 0.0 ;
}
}
//--------------------------------------------------------------------------
//
cvConDensUpdateByTime ( ConDens ) ;
cvShowImage ( "Normal" , image ) ;
c = cvWaitKey ( 20 ) ;
if ( c == 27 ) {
break ;
}
}
//------------------------------------
cvReleaseImage ( &image ) ;
cvReleaseImage ( &HSV ) ;
cvReleaseConDensation ( &ConDens ) ;
cvReleaseMat ( &lowerBound ) ;
cvReleaseMat ( &upperBound ) ;
cvReleaseCapture ( &capture ) ;
cvDestroyWindow ( "Normal" ) ;
//---------------------------------------------
return 0 ;
}
# ifdef _EiC
main ( 1 , "condensation.cpp" ) ;
# endif
also when o comment this
for ( int i = 0 ; i < SamplesNum ; i++ ) {
X = ( int ) ConDens -> flSamples [ i ] [ 0 ] ;
Y = ( int ) ConDens -> flSamples [ i ] [ 1 ] ;
if ( X >= 0 && X <= 640 && Y >= 0 && Y <= 480 ) { //
getpixel ( HSV , X , Y , &H , &S , & V ) ;
if ( H <= 19 && S >= 48 ) { // //H<=19 S>=48
cvCircle ( image , cvPoint ( X , Y ) , 4 , CV_RGB ( 255 , 0 , 0 ) , 1 ) ;
ConDens -> flConfidence [ i ] = 1.0 ;
}
else {
ConDens -> flConfidence [ i ] = 0.0 ;
}
}
else {
ConDens -> flConfidence [ i ] = 0.0 ;
}
}
program work without do my idea of track object
i have windows 8
please comment if u dont understand some thing
I think that the problem is related to the declaration of IplImage *frame inside the for loop. When the size of your video length increases then, your memory gets full. Because you are continuously creating new frames inside the for loop without freeing the memory allocated to them.
You should declare IplImage *frame outside the for loop and then release the memory allocated to it outside the for loop.
ADVICE: Do not use old C-standards of OpenCV. Use the new C++ standards where you have to declare an image as Mat image. Then, you don't need to think about freeing memory because it does all the stuff itself.

QTreeView not displaying data

I have derived from QAbstractItemModel to encode my own tree of data, but the QTreeView is not displaying.
Most of the answers I saw to similar questions were solved because of wrong variable life time, so here is my code for allocation of the model:
ui.tvHierarchy->setModel(
new MetaHierarchyModel(
cutOffExtension(
fileName.toStdString()
)
)
);
On construction the model gets its root node filled with data and later shall load more data as needed (via fetchMore).
I began outputting every function that is called. This is a log of the call sequence:
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return 1
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return 1
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return 1
hasChildren( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return true
hasChildren( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return true
canFetchMore( QModelIndex(-1,-1,0x0,QObject(0x0) ) ))
return false
rowCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return 1
index( 0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )
hasChildren( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) ) )
return true
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return 1
parent( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) ) )
return QModelIndex(-1,-1,0x0,QObject(0x0) )
index( 0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )
data( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) ) , 13 )
return "Metaparticle 1"
columnCount( QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return 1
parent( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) ) )
return QModelIndex(-1,-1,0x0,QObject(0x0) )
index( 0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0) ) )
return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) )
data( QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970) ) , 13 )
return "Metaparticle 1"
Output of roleNames():
QHash((0, "display")(1, "decoration")(2, "edit")(3, "toolTip")(4, "statusTip")(5, "whatsThis"))
The last four lines are then repeated forever (or at least until I loose my patience).
To me it looks like the root data are fetched, but they never get displayed. It is strange, that the last parameter of data - which is int role, has the value 13, which is not defined as any role (still I give back valid strings unconditionally).
Is there anything I missed when implementing this?
The QAbstractItemModel::data function should be as stingy as possible with the data it returns. Make sure you only return data when you have an exact match on the display role and column number. In all other cases just return an invalid QVariant (just call the default constructor), and your view widget will fill in these missing values with sensible defaults.