From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

image with intensity chart overlay

Hello Everyone,

 

I am trying to develop a User Interface where my customer can import an image and select certain points in the image where he positioned thermocouples. As the measurement starts I would like to overlay a semi-opaque intensity chart, that visualizes the temperatures of the thermocouples. Kinda like the SeeSV demo

 

Since LabVIEW (to my knowledge) only allows 100% transparency or none, overlaying a transparent intensity chart on a picture didn't work. Also, I think I remember that this would seriously hurt performance.

Since .Net is usually the correct tool for this kind o f thing I tried the picture Box. Here's what I did:

 BackgndImg.png

I also tried the fromFile Method. In both cases, nothing really happened.

 

Another thing I tried was to overlay two Pictureboxes, one for the image and one for the overlay. The Picturebox has a Method to set the background color which supports alpha channel, but it seems that this only sets the background color, when called. This has the effect, that you can set it to fully transparent while your VI background is yeller and it will become yellow, but if you then set the background to another color it'll still be yellow.

 

Right now my workaround would be to use a single 2D Picture and "mix" Background image and overlay together. This does feel a lot like writing functions that must exist somewhere already. There must be an easier way. Do you have a better idea?

 

Any help is greatly appreciated!



Remember Cunningham's Law
Message 1 of 7
(4,854 Views)

The old CW3Dgraph used supported variable transparency

 

 

so if you...

render the picture as one plane with trnasparency at 0%

and then

plotted your intensity data on another plane

and

forced the view to be straight down you may get the result you want.

 

Ben

Retired Senior Automation Systems Architect with Data Science Automation LabVIEW Champion Knight of NI and Prepper LinkedIn Profile YouTube Channel
Message 2 of 7
(4,827 Views)

I once used this approach to mix several images ( 1000 x 600) sensors and cameras generating a live-image using various picture palette vi's



Transparency is simply a weighted average between the color values of two pixels.  As an example, consider the following two colors:

Pure red, or RGB(255, 0, 0)

Pure blue, or RGB(0, 0, 255)

At 50% transparency – or a pure blending between these two colors – we would simply add the individual color amounts together and divide by two.  This gives us a new color –

Purple, or RGB(127, 0, 127)

The effect is certainly more impressive when applied pixel-by-pixel across an entire image, as the downloadable project demonstrates.

 

 

 

 

but I guess, .NET might be a better solution at framerates higher than 30 fps.

 

the Screen Capture.vi (32.9 K) LabVIEW 8.6  from https://decibel.ni.com/content/docs/DOC-37135 might be a good start for you, if you wanted to learn about .net image processing

 

 

Regards,
Alex

 

 

 

 

 

 

Message 3 of 7
(4,814 Views)

Hi,

 

now I've finally gotten around to look at my problem a bit more.

I have felt that the 3D Solution is a bit complicated in that I couldn't figure out how to map the picture to the plane. I assume it's done by plotting a plane (i.e. a Matrix with identical values) and then pushing the bmp in as mapping, but I didn't quite know where to start here.

As for the mixing solution: If you know what size the picture will be, this works well. However, I have to assume that my customer will use whichever picture he'll get his hands on, so I need a solution with a built in zoom function.

 

Because of this, I had a closer look at the .Net PictureBox. and finally found out how to load Image and BackgroundImage into it. Since the Image supports alpha Channel this solves all my problems but one: Loading pixels into it. Right now my only solution is to save the png with alpha channel and load it back in. This function is called once every 5 Seconds, so that's acceptable. Maybe someone knows how to push in an array of pixels. I somehow fail to convert the array into a .Net Pointer. Here's the core of my solution:

 

BackgndImg.png

 

Thanks for all your help!

 

 

P.S.: Kudos for using that FF8 Picture

 



Remember Cunningham's Law
0 Kudos
Message 4 of 7
(4,763 Views)

Maybe someone knows how to push in an array of pixels.

 

How about this ?

 

 

https://decibel.ni.com/content/docs/DOC-15165

 

0 Kudos
Message 5 of 7
(4,755 Views)

oh, I posted the wrong link. here's the real one: https://decibel.ni.com/content/docs/DOC-15159

0 Kudos
Message 6 of 7
(4,750 Views)

looks like this is compatibel with your core vi:

 

2016-07-26_from_array.png

0 Kudos
Message 7 of 7
(4,742 Views)