|
Hi, I was guessing the same, but i am creating a win32 application,
1) Sould i go with MFC
2) Or Subclass existing edit control in win32 c++
Or some other way if exists:...
Regards,
Vishal
|
|
|
|
|
SOLVED
Adding MJPEG driver to my box solved the problem.
Now I need to clean up the test mess I have added to my app!
Moral of the story - when working with OpenCV beware of lack of commnets in the code and always check the logic, it is not the best. I actually feel this is a (logical ) bug and has been in OpenCV since 1.1 and it is still in 2.4.0.
Thanks for all your help.
vaclav
I am trying to display image from USB connected camera.
I know the camera works – I can get a nice image using MS Scanner and Camera wizard.
My problem is that capGetVideoFormat fills the BITMAPINFO biCompression with a value I have no idea what it represents. MSDN is no help in defining this in video frame.
If it is a decompressor info it does not match any of 15 decompression installed on the system.
So
<b>how do I KNOW for sure the USB video is compressed and
how do I use this biCompression value for further processing?</b>
Here is the offending snippet from OpenCV library
BITMAPINFO vfmt;
memset( &vfmt, 0, sizeof(vfmt));
BITMAPINFOHEADER& vfmt0 = vfmt.bmiHeader; // input header
int sz, prevWidth, prevHeight;
if( !capWnd )
return 0;
this fills the biCompression value in question
sz = capGetVideoFormat( capWnd, &vfmt, sizeof(vfmt));
…..............
And this is where attempt to locate the decompressor driver fails
hic = ICLocate (ICTYPE_VIDEO, 0L, (LPBITMAPINFOHEADER) &vfmt,
NULL, ICMODE_DECOMPRESS);
Any suggestions are as always appreciated.
PS I need to stay with capAVI and OpenCV.
Thanks
Vaclav
|
|
|
|
|
Vaclav_Sal wrote: My problem is that capGetVideoFormat fills the BITMAPINFO biCompression with a value I have no idea what it represents.
What is its value?
Veni, vidi, vici.
|
|
|
|
|
|
If you convert that to hex you get 47504A4D - the characters "MJPG" backwards. So it looks like you need to use a motion JPEG codec.
|
|
|
|
|
As already suggested, is M-JPEG (in particular Pinnacle M-JPEG ).
Veni, vidi, vici.
|
|
|
|
|
Ok, that is not one of the drivers in the system.
I hope is is no brainer to find it and add to the system.
I sure would like to know where did you find out how to decode this diCompressor value.
And of course how did MS determine that - where is it "advertized".
I did not see anything like that in device driver properties.
Thanks
Vaclav
|
|
|
|
|
I found this under FOURCC, I guess I just answered my own question.
Next time I'll test for the FOURCC code!
<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd375802(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd375802(v=vs.85).aspx</a>[<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd375802(v=vs.85).aspx" target="_blank" title="New Window">^</a>]
|
|
|
|
|
How to draw an image excepting balck pixel color using gdi DrawImage function?
|
|
|
|
|
|
u can select other pixel color when u create the CPen,
CPen(int nPenStyle,int nWidth,COLORREF crColor);
|
|
|
|
|
We have migrated our workspace from VC6.0 to VS2010. There is a CreateControl api which is returning 0 after converting to VS2010. Before conversion this was working fine.
What could be the reason for failure.
|
|
|
|
|
V K 2 wrote: What could be the reason for failure.
At a guess, there is a bug in your code. Assuming you mean this function[^] then you can use your debugger to see what is happening. You could also check the value of GetLastError() on failures.
Binding 100,000 items to a list box can be just silly regardless of what pattern you are following. Jeremy Likness
|
|
|
|
|
|
See here[^] for example.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|
|
|
Have a look at this[^] also.
|
|
|
|
|
Malli_S
|
|
|
|
|
void main()
{
const int i = 10;
int& j = (int&)i;
cout << "i= " << i << endl;
cout << "j= " << j << endl;
cout << "&i= " << &i << endl;
cout << "&j= " << &j << endl;
j++;
cout << "j= " << j << endl;
cout << "i= " << i << endl;
}
//output
i= 10
j= 10
&i= 0012FF60
&j= 0012FF60
j= 11
i= 10
Hi,
the code declares a const integer and a reference to it. incrementing a reference adds 1 to j and outputs as 11, that is fine. i was expecting "i" to get modified, since "i" and "j", both having a same memory address, as i print "i", it outputs 10 (or compiler should not allow to increment j). i could not understand the behavior. Could anybody explains me what is going on behind the scene?
regards
Abid
|
|
|
|
|
Which compiler are you using is it VS or something else?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
|
If you generate the assembler listing for this code you can see that any reference to i in the code uses the constant value 10 , but references to j use a memory variable, initially having a value of 10 but incremented as shown. I am not sure which language rule allows this but I would assume that since j is a reference to an integer then its target becomes a regular value.
I have tried changing j to const int& , but the compiler objects with error C3892.
Binding 100,000 items to a list box can be just silly regardless of what pattern you are following. Jeremy Likness
|
|
|
|
|
Additionally to what Richard said, if you change your
const int i = 10;
to
volatile const int i = 10;
then you get the expected result (outputting both i and j gives you 11 in the end).
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|
|
The reason for that is that the compiler can't assume that i is fixed any more (you've told it that something somewhere could modify it) so there's a real variable behind it.
You're still not allowed to modify it through i though! This sort of trick is really handy for overlaying C++ objects on ranges of addresses for memory mapped devices.
Cheers,
Ash
|
|
|
|
|
Aescleal wrote: The reason for that is that the compiler can't assume that i is fixed any more (you've told it that something somewhere could modify it) so there's a real variable behind it. I know. As far as i know this basically means "don't keep in a register", so the compiler will do its best to keep the memory up-to-date.
Aescleal wrote: You're still not allowed to modify it through i though! This sort of trick is really handy for overlaying C++ objects on ranges of addresses for memory mapped devices. I think you shouldn't be able to do it, since usually things are declared as const for a reason, if you need to change them then don't make them const. But of course, there are those nasty situations when doing that can and will come in handy, like when you are using some 3rd party code you are not allowed (or simply don't want) to modify and try to call a method through a const pointer about which you know it does not change the object (like some simple Get method) and realize that the coder who created it kinda forgot to make the method const. Altrough this still might be dangerous because the method's implementation might change in the future and after the next update of the 3rd party library/codebase it borks everything...
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|