The other way that I just did was basically the same thing, but the image doesn't really exist, like img-uid.png where uid is the uid I care about for tracking purposes. Then in my webserver setup I pass the details to a server side component to manage the tracking and return a generic 1x1 transparent image. There are lots of ways to do that, but it protects you for those cases where an email client strips query string params on img src's.
Of course if the user doesn't allow the images to load you get no tracking, so that is a limitation but most systems have that limitation. So you should also have link tracking etc.